Макросом открыть все указанные файлы

Автор Сергей ISV, 8 октября 2022, 20:34

0 Пользователи и 1 гость просматривают эту тему.

Сергей ISV

Здравствуйте!
Может кто подскажет, как открыть сразу несколько отмеченных файлов.
Есть функция:
Function open_file() as String

   Dim file_dialog as Object
   Dim status as Integer
   Dim file_path as String
   Dim init_path as String
   Dim ucb as object
   Dim filterNames(2) as String

   filterNames(0) = "*.odt"
   filterNames(1) = "*.*"

   GlobalScope.BasicLibraries.LoadLibrary("Tools")
   file_dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
   ucb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
   init_path = ConvertToUrl("F:\")

   If ucb.Exists(init_path) Then
      file_dialog.SetDisplayDirectory(init_path)
   End If

   status = file_dialog.Execute()
   If status = 1 Then
      file_path = file_dialog.Files(0)
      open_file = file_path
   End If
   file_dialog.Dispose()

End Function

Но при работе эта функция позволяет отметить только один файл (с CRTL или SHIFT не работает).
Как сделать, чтобы функция "выдавала" несколько имён отмеченных файлов?
И как потом по этим именам открыть все указанные файлы?

sokol92

#1
Для того, чтобы диалог выбора файла мог возвращать несколько значений, существует метод setMultiSelectionMode :
file_dialog.setMultiSelectionMode True
Нужно изменить тип возврата Вашей функции на Variant (проще не указывать тип возвращаемого значения) и присвоение выполнить так:
open_file = file_dialog.getSelectedFiles
К функции есть много вопросов:
1. Для чего нужна библиотека "Tools"
2. Элементы массива filterNames перекрывают друг друга и т.п.

Метод getSelectedFiles возвращает массив полных путей к выбранным файлам в URL формате. Как открыть файл по eго URL написано во многих руководствах.

Пожалуйста, для редактирования кода используйте кнопку "Код" на инструментальной линейке.
Владимир.

Сергей ISV

Насчёт элементов массива filterNames, тогда как задать, чтобы фильтр показывал только файлы odt ?

bigor

Цитата: Сергей ISV от  9 октября 2022, 20:21тогда как задать, чтобы фильтр
как-то так:
Sub FileSelected

oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oFileDialog.SetDisplayDirectory(ConvertToUrl("c:\Test\"))
oFileDialog.setMultiSelectionMode(True)
oFileDialog.appendFilter("ODF Files (.odt)", "*.odt" )
iOpenFile = oFileDialog.Execute()
If iOpenFile = 0 Then
MsgBox "Файлы не выбраны"
Exit sub
Else
For i =0 To ubound(oFileDialog.SelectedFiles)
MsgBox i & ">"& oFileDialog.SelectedFiles(i)
Next i
End If
End sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Сергей ISV