如何为 libreoffice 的所有 xls/xlsx 文件 运行 一个宏

How to run a single macro for all xls/xlsx files for libreoffice

是否可以为所有 xls/xlsx 个文件 运行 一个宏,如果可以,如何实现。下面显示的宏缩放 excel 文件以适合单页,这是必要的,因为列数为 19,并且需要使用 lo cli 将其转换为 pdf。

自由办公版本: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

如果需要有关测试的任何信息,请告诉我。

从 Libreoffice 的一位开发人员那里得到了答案,它非常有用,所以在这里分享。 link 可以找到答案 here

迈克的解决方案

首先:您录制的宏不起作用:它不应用更改,它只是打开一个对话框。请始终测试录制的宏:-)

您可以改用这个宏:

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 调用的参数,例如 shell 使用 * 在 Linux 上进行 globbing,将不起作用 - 实际上,它只会 运行 最后一个文档的宏,保持其他文档打开和未修改)。 Windows 的循环可能是这样的:

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