2015-07-04 3 views
1

Я хочу использовать встроенный диалог Open File из моей надстройки VSTO. При отображении диалога я должен установить InitialFileName. К сожалению, это свойство не существует в диалоге класса:Использование диалогового окна открытого файла Word

var Dlg = Word.Dialogs.Item(WdWordDialog.wdDialogFileOpen); 
Dlg.InitialFileName = SomePath; //COMPILE ERROR: no such property 

Попробуйте бросить его FileDialog также не работает:

var Dlg = Word.Dialogs.Item(WdWordDialog.wdDialogFileOpen) as FileDialog; 
Dlg.InitialFileName = SomePath; //RUNTIME EXCEPTION: null reference 

Что я здесь отсутствует?

Примечание: Я использую надстройку Express.

ответ

1

Понял. Мне нужно было наложить свой объект приложения на Microsoft.Office.Interop.Word.Application, чтобы получить доступ к члену FileDialog. Следующий код работает:

var Dlg = ((Microsoft.Office.Interop.Word.Application)Word).get_FileDialog(MsoFileDialogType.msoFileDialogFilePicker); 
Dlg.InitialFileName = STRfolderroot + STRfoldertemplatescommon + "\\" + TheModality + "\\" + TheModality + " " + TheStudyType + "\\"; 
Dlg.Show(); 
+0

Хороший! Рад, что вы его отсортировали :) –

0

На странице Microsoft в вашем сообщении показано свойство, используемое для диалога msoFileDialogFilePicker, но ваш код использует wdDialogFileOpen. Пример кода на странице MS работает отлично, но попытка использования свойства для wdDialogFileOpen также генерирует ошибку времени выполнения.

Так это работает:

Sub ThisWorks() 

    Dim fd As FileDialog 

    Set fd = Application.FileDialog(msoFileDialogFilePicker) 

    Dim vrtSelectedItem As Variant 

    With fd 
     .InitialFileName = "C:\folder\printer_ink_test.docx" 

     'If the user presses the action button... 
     If .Show = -1 Then 

      For Each vrtSelectedItem In .SelectedItems 
       MsgBox "Selected item's path: " & vrtSelectedItem 
      Next vrtSelectedItem 
     'If the user presses Cancel... 
     Else 
     End If 
    End With 

    Set fd = Nothing 

End Sub 

Но это не удается:

Sub ThisFails() 

    Dim fd As Dialog 

    Set fd = Application.Dialogs(wdDialogFileOpen) 

    Dim vrtSelectedItem As Variant 

    With fd 
     ' This line causes a run-time error 
     .InitialFileName = "C:\folder\printer_ink_test.docx" 

     'If the user presses the action button... 
     If .Show = -1 Then 
      For Each vrtSelectedItem In .SelectedItems 
       MsgBox "Selected item's path: " & vrtSelectedItem 
      Next vrtSelectedItem 
     'If the user presses Cancel... 
     Else 
     End If 
    End With 

    Set fd = Nothing 

End Sub 
+0

Спасибо за ввод, но я не вижу 'FileDialog' в качестве опции в любом месте VSTO. Обратите внимание: в отличие от страницы MSDN, я не использую VBA. – dotNET

+0

Имеет ли [эта статья] (http://www.codemag.com/Article/090153) пролить свет? – ChipsLetten

+0

В статье говорится, что я должен использовать метод get_FileDialog() в C#, но даже этого не существует в классе 'Application'. Я использую Add-in Express, если это играет определенную роль здесь. – dotNET

0

Извините за скриншот, я использую мой телефон, чтобы ответить.

Это, как вы делаете это для Excel в соответствии с рисунком из Google книг: Globals.ThisWorkbook.ThisApplication.FileDialog

enter image description here

Для MS Word в соответствии с этим link, это то, как его сделали:

Office.FileDialog dialog = app.get_FileDialog(
    Office.MsoFileDialogType.msoFileDialogFilePicker); 
//dialog.InitialFileName <-- set initial file name 
dialog.Show(); 
Смежные вопросы