FileDialog .SelectedItems(1)outlook VSTO加载项不返回文件路径

时间:2017-08-25 17:06:45

标签: visual-studio excel-vba outlook-addin outlook-vba vba

我正在尝试在Visual Studio 2017中使用Visual Basic创建Outlook VSTO加载项,出于某种原因,我需要通过使用Excel FileDialog通过导入{{单击功能区中的按钮来选择文件位置1}}。我在这里添加了代码,VBA宏的相同代码模式在outlook的内置VBA窗口中正常工作,但是当我在Visual Studio调试模式下执行此代码(针对VSTO加载项进行了修改)时,它会打开{ {1}}弹出窗口,我可以选择单个文件,但Microsoft.Office.Interop.Excel没有返回任何路径以返回输出。我们非常感谢您的协助。感谢。

VBA代码(在Outlook VBA窗口中工作)

FileDialog

VBA_Code

VBA_Code

和... 的 VBA_Output
VBA_Output ..

VSTO代码:输出中没有文件路径(使用Visual Studio 2017)

.SelectedItems(1)

VSTO_Code_VisualStudio17 VSTO_Code_VisualStudio17

并且...... VSTO_Output VSTO_Output

1 个答案:

答案 0 :(得分:2)

注意:方法1不适用于Outlook。如果有人在这里寻找其他VSTO应用程序的解决方案,请保留它。

方法1(Excel,Word,仅限PowerPoint)

这是由于.NET中基于零的索引。虽然许多VSTO集合使用基于1的索引,但SelectedItems不是其中之一。另请注意,您永远不应该(永远)在VSTO加载项中使用new Application()。默认情况下,所有VSTO加载项都会Globals.ThisAddin.Application(如果您已经在this.Application类中,则为ThisAddin)可用于访问当前应用程序实例。

所以你原来的代码应该是这样的:

Public Sub SelectFile()
  Dim objDialog = Me.Application.FileDialog(Microsoft.Office.Core.MsoFileDialogType.msoFileDialogFilePicker)

  With objDialog
    .AllowMultiSelect = False
    .Title = "Select your PST File"
    .ButtonName = "OK"
    If .Show() = -1 Then
      MsgBox("You have selected: " & .SelectedItems(0))
    Else
      MsgBox("No file selected.")
    End If
  End With
End Sub

方法2(所有VSTO和其他WinForms / WPF应用程序)

由于FileDialog在Outlook中不可用,因此另一种方法是使用Microsoft.Win32对话框来实现相同的目的。以下是我过去项目中的一些代码:

Public Sub SelectFile()
  Dim openDialog As new Microsoft.Win32.OpenFileDialog()
openDialog.Filter = "Audio files (*.wav, *.mp3, *.m4a)|*.wav;*.mp3;*.m4a"
  If openDialog.ShowDialog().GetValueOrDefault() Then
   Dim NewAudioFilePath = openDialog.FileName
  End If
End Sub

您必须添加对PresentationFramework库的引用才能实现此目的。