Как запустить один макрос для всех файлов xls/xlsx для libreoffice

Можно ли запустить один макрос для всех файлов xls/xlsx, и если да, то как. Макрос, показанный ниже, масштабирует файл Excel, чтобы он уместился на одной странице, что необходимо, поскольку количество столбцов равно 19 и необходимо для преобразования его в pdf с помощью lo cli.

Версия бесплатного офиса: 6.0.6

Макрос был записан с помощью libreoffice, его можно увидеть ниже:

REM  *****  BASIC  *****

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
vrem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PageFormatDialog", "", 0, Array())
end sub

Пожалуйста, дайте мне знать, если нужна какая-либо информация о тестах.


person Binoy Cherian    schedule 03.10.2018    source источник


Ответы (1)


Получил ответ от одного из разработчиков Libreoffice, и он прекрасно работает, поэтому делюсь им здесь. Ссылку на ответ можно найти здесь

Решение Майка

Во-первых: ваш записанный макрос не будет работать: он не применяет изменения, он просто открывает диалог. Пожалуйста, всегда проверяйте записанные макросы :-)

Вместо этого вы можете использовать этот макрос:

Sub FitToPage
  Dim document As Object, pageStyles As Object
  document   = ThisComponent
  pageStyles = document.StyleFamilies.getByName("PageStyles")
  For i = 0 To document.Sheets.Count - 1
    Dim sheet As Object, style As Object
    sheet = document.Sheets(i)
    style = pageStyles.getByName(sheet.PageStyle)
    style.ScaleToPagesX = 1
  Next
  On Error Resume Next
  document.storeSelf(Array())
  document.close(true)
End Sub

Он работает с текущим документом, а после установки масштаба сохраняет (перезаписывает!) и закрывает документ.

Чтобы использовать этот макрос из командной строки, вам необходимо сохранить его в какой-либо из библиотек, например. Стандарт. В моем примере ниже я использую Module1 для его хранения.

Вы можете использовать этот макрос в одном документе следующим образом:

'path/to/LibreOffice/program/soffice' path/to/excelfile.ext macro:///Standard.Module1.FitToPage

Чтобы использовать его в нескольких документах, вам нужно сделать это в цикле (упоминание нескольких имен файлов в качестве аргументов для одного вызова soffice, например, при подстановке оболочки в Linux с использованием *, не будет работать — на самом деле он будет запускать макрос только для последний документ, оставив остальные открытыми и неизмененными). Цикл для Windows может быть таким:

for %f in (*.xls) do start /wait "" "C:\Program Files\LibreOffice\program\soffice.exe" "%f" macro:///Standard.Module1.FitToPage
person Binoy Cherian    schedule 03.10.2018