LibreOffice 在 Debian 上的宏功能使用指南
一 安装与启用宏
- 安装 LibreOffice(建议使用完整套件,包含脚本支持):
- 更新索引并安装:sudo apt update && sudo apt install libreoffice
- 如需完整功能包(含更多语言与脚本组件),可安装:sudo apt install libreoffice-script-provider-python(按需选择)
- 启用宏:
- 启动 LibreOffice → 菜单 工具 → 选项 → 安全性 → 宏设置
- 选择 启用宏(并建议仅启用来自可信来源的宏,必要时使用“仅受信任位置”)
- 说明:
- 名称更正:应为 LibreOffice(而非“LibOffice”)
- 安全提示:宏可执行任意代码,启用前请确认来源可信,并定期更新 LibreOffice 与宏设置
二 宏语言与存放位置
- 支持的主要语言:StarBasic、Python(亦可扩展其他 UNO 脚本语言)
- 宏的存放路径(示例为当前用户,版本号可能不同,如 7、24 等):
- 我的宏:~/.config/libreoffice/4/user/Scripts/(Basic/Python 等)
- 应用程序宏:/usr/lib/libreoffice/share/Scripts/(系统级,需管理员权限)
- 文档内嵌宏:打包在文档内(需解压 ODT/ODS 可见)
- 运行入口:菜单 工具 → 宏 → 运行宏(或按语言/位置浏览到目标宏执行)
- 备注:Python 宏通常使用外部编辑器编写,LibreOffice 提供 XSCRIPTCONTEXT 全局对象以访问 UNO API
三 编写与运行示例
- StarBasic 示例(在 Writer 中插入文本)
- 打开 工具 → 宏 → 运行宏 → 新建模块(如 Standard → Module1),粘贴:
Sub HelloWriter
Dim oText As Object, oCursor As Object
oText = ThisComponent.getText()
oCursor = oText.createTextCursor()
oText.insertString(oCursor, "Hello from LibreOffice Basic on Debian!", 0)
End Sub
- 运行 HelloWriter 即可在当前文档插入文本
- Python 示例(在 Writer 中显示 Python 版本)
- 提示:Python 宏不在内置编辑器中创建,建议使用外部编辑器,并通过 APSO 扩展(Alternative Script Organizer for Python)提升组织与调试体验
四 命令行执行与无头批处理
- 常用命令
- 启动 GUI:libreoffice 或 soffice
- 指定应用:libreoffice --writer /path/file.odt;localc /path/file.ods 等
- 无头转换:libreoffice --headless --convert-to pdf /path/file.docx
- 执行宏
- 基本语法:libreoffice [–headless] --macro=<宏URL> [文件路径]
- 示例(无头更新 .docx 的目录索引):
- 准备宏(在 Standard.Module1 中添加 UpdateIndexes(path) 方法,见下),然后执行:
libreoffice --headless "macro:///Standard.Module1.UpdateIndexes(/absolute/path/to/file.docx)"
- 宏示例(更新 Writer 文档的所有索引,如目录):
Sub UpdateIndexes(path As String)
Dim doc As Object, args()
doc = StarDesktop.loadComponentFromUrl(ConvertToURL(path), "_default", 0, args())
If doc.supportsService("com.sun.star.text.GenericTextDocument") Then
Dim i As Integer
For i = 0 To doc.getDocumentIndexes().getCount() - 1
doc.getDocumentIndexes().getByIndex(i).update()
Next i
End If
doc.store()
doc.close(True)
End Sub
- 说明:宏 URL 语法为 macro:///[库.模块.宏];文件路径需为绝对路径;无头模式下建议仅处理 Writer 文档的索引更新等任务
五 安全与排错建议
- 安全
- 在 工具 → 选项 → 安全性 → 宏设置 中优先选择 仅受信任位置 或 禁用宏并发出通知,仅对可信宏放宽权限
- 避免启用来自不明来源的文档内嵌宏;必要时在虚拟机/容器中测试
- 排错
- Python 宏未显示或无法运行:确认脚本位于正确路径(如 ~/.config/libreoffice/…/Scripts/python),函数名在 g_exportedScripts 元组中导出
- 命令行宏找不到:检查宏 URL 拼写、库/模块/宏名大小写,以及文件路径为绝对路径
- 无头执行失败:添加 --headless 后 GUI 元素不可用;优先使用 Writer 的 UNO 接口完成文档处理,必要时改用 xba/Basic 宏
- 版本差异:用户配置目录中的版本号(如 4)会随 LibreOffice 版本变化,按实际路径调整
- 参考资源
- Andrew Pitonyak 的宏指南(OOME,OpenOffice.org Macros Explained)是学习 LibreOffice 宏的经典资料,涵盖 StarBasic 与 UNO API 的大量实例