如何为 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
是否可以为所有 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