LibreOffice如何获取filepicker多个文件选择数据

时间:2015-09-05 11:01:53

标签: vba libreoffice basic

在LibreOffice 4.2中我试图打开文件选择器并选择多个文件(我成功了),然后将这些文件的名称(和路径)传递给变量(或数组,无所谓)。 / p>

虽然我可以打开文件选择器并选择多个文件,但我只能得到一个文件的文件名和路径(第一个)。我无法找到任何方法来获得其他人。

我使用以下代码:

Sub TakeFile()
   Dim FileNames(0 to 100) as String
   FileNames() = fImportLocalFile()
   Msgbox FileNames
End Sub

Function fImportLocalFile() 'as String
' FJCC: Can't define the function as returning a String because now it returns an array
   'this function opens a system file open dialog box and allows the
   '   user to pick a file from thier computer to open into the
   '   document for processing

   'stores the filedialog object
   Dim oFileDialog as Object
   'stores the returned result of the activation of the dialog box
   Dim iAccept as Integer
   'stores the returned file name/path from the file dialog box
   Dim sPath as String
   'stores the set default path for the dialog box
   Dim InitPath as String

   'stores the types of files allowed in the filedialog
   Dim sFilterNames as String

   'setup the filters for the types of files to allow in the dialog
   sFilterNames = "*.csv; *.txt; *.odt; *.ods; *.xls; *.xlt; *.xlsx"

   'create the dialog box as a Windows File Dialog
   oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")

   'set the filters for the dialog
   oFileDialog.AppendFilter("Supported files", sFilterNames)

   'set the path as blank
   InitPath = ""

   'add the default path to the dialog
   oFileDialog.setDisplayDirectory(InitPath)

   'setup the dialog to allow multiple files to be selected
   oFileDialog.setMultiSelectionMode(True)

   'set iAccept as the execution of the dialog
   iAccept = oFileDialog.Execute()

   'execute and test if dialog works
   If iAccept = 1 Then
      'set sPath as the chosen file from the dialog
      'sPath = oFileDialog.Files(0)
      FileArray = oFileDialog.getFiles() 'added by FJCC
      'set the function as sPath for returning to the previous sub
      fImportLocalFile = FileArray  'modified by FJCC
   'end current if statement
   End If

End Function

2 个答案:

答案 0 :(得分:0)

您的错误是您正在将所选文件的数组分配给功能名称本身!选择其他名称。

这适用于LO 5.0.0.5

SUB TakeFile()
'   Dim FileNames(0 to 100) as String
'   Dont limit yourself!

   FileNames = fImportLocalFile()

   path = FileNames(0)
    FOR i = 1 TO Ubound(FileNames)
       print path + FileNames(i)
    Next 

End Sub

并在函数内:

path = FileArray(0)
FOR i = 1 TO Ubound(FileArray)
   print path + FileArray(i)
Next 

fImportLocalFile    = FileArray

答案 1 :(得分:0)

有一个接口XFilePicker2,它扩展了文件选择器接口以解决一些设计问题。"此接口具有方法getSelectedFiles

请参阅https://www.openoffice.org/api/docs/common/ref/com/sun/star/ui/dialogs/XFilePicker2.html

使用此方法代替XFilePicker.getFiles

以下内容应该有效:

Sub TakeFile()

   Dim FileNames() as String
   FileNames = fImportLocalFile()

   Msgbox Join(FileNames, Chr(10))

End Sub

Function fImportLocalFile() as Variant

   Dim oFileDialog as Object
   Dim iAccept as Integer
   Dim sPath as String
   Dim InitPath as String

   Dim sFilterNames as String

   sFilterNames = "*.csv; *.txt; *.odt; *.ods; *.xls; *.xlt; *.xlsx"

   oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")

   oFileDialog.AppendFilter("Supported files", sFilterNames)

   InitPath = ""

   oFileDialog.setDisplayDirectory(InitPath)

   oFileDialog.setMultiSelectionMode(True)

   iAccept = oFileDialog.Execute()

   If iAccept = 1 Then
      fImportLocalFile = oFileDialog.getSelectedFiles() 
   Else
      fImportLocalFile = Array()
   End If

End Function