Как запустить один макрос для всех файлов xls / xlsx для libreoffice - PullRequest
0 голосов
/ 03 октября 2018

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

Libre office version: 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

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

1 Ответ

0 голосов
/ 03 октября 2018

Получил ответ от одного из разработчиков в 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

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

Чтобы использовать этот макрос из командной строки, вам необходимо сохранить его в некоторых библиотеках, например, Standard.В моем примере ниже я использую 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
...