Я создаю надстройку Excel, которая использует Excel.Application.FileDialog, чтобы пользователь мог выбирать файлы. Когда FileDialog открывается и файлы выбираются, имена файлов не вставляются в текстовое поле имени файла в диалоговом окне. Оно остается пустым независимо от того, как щелкают файлы.
Среда старая, но работает:
- Windows XP
- Visual Studio 2008 Professional
- Точка Net 3.51 SP1
- Microsoft Office 2007 SP3
На приведенном ниже снимке экрана только четыре файла были выбраны, но поле имени файла остается пустым. Я ожидаю, что имена файлов будут вставлены туда в формате CSV, но это не так.
Кто-нибудь знает, как я могу решить или даже эффективно устранить неполадки ..?
Эта проблема возникает независимо от того, ссылается ли Office
на PIA
или GAC
. В настоящее время он указывает на:
C:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Office.dll
Код для создания диалога следующий:
Dim xl As Microsoft.Office.Interop.Excel.Application = Globals.ThisAddIn.Application
Dim fd As Microsoft.Office.Core.FileDialog = xl.FileDialog (Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFilePicker)
fd.AllowMultiSelect = True
fd.ButtonName = "&Add"
fd.Filters.Add("Excel workbooks", "*.xls; *.xlsx")
fd.Filters.Add("All files", "*.*")
fd.FilterIndex = 0
fd.InitialView = Microsoft.Office.Core.MsoFileDialogView.msoFileDialogViewDetails
fd.Title = "Select Files"
Dim okPressed As Boolean = CBool(fd.Show())
If okPressed Then
Dim newFilenameCount As Integer = fd.SelectedItems.Count
If newFilenameCount > 0 Then
For i As Integer = 1 To newFilenameCount 'Loop through .SelectedItems (1-based).
Dim filename As String
filename = LCase(fd.SelectedItems.Item(i)) 'Get filename.
Dim doesntExist As Boolean = True
For j As Integer = 0 To dgv.Rows.Count - 1 'Search list to see if filename already exists (0-based).
If filename = CStr(dgv.Rows.Item(j).Cells.Item(1).Value) Then
doesntExist = False
Exit For
End If
Next
If doesntExist Then
filename = fd.SelectedItems.Item(i)
'Get filename, but this time not lowercased.
dgv.Rows.Add(True, filename)
Else
Dim msgstyle As MsgBoxStyle = DirectCast(MsgBoxStyle.ApplicationModal + MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, MsgBoxStyle)
MsgBox("The file " & GetFileName(filename) & " is already selected.", msgstyle, "File Selection Error")
End If
Next
End If
End If
fd = Nothing