在 CentOS 上使用 LibreOffice 宏的完整指南
一 环境准备与安装
- 安装 LibreOffice(桌面或服务器版均可)。在终端执行:sudo yum install -y libreoffice。安装后可用 libreoffice --version 或 soffice --version 验证版本。为减少无头运行时的图形依赖,建议同时安装常用基础包:sudo yum install -y fontconfig wqy-microhei-fonts wqy-zenhei-fonts cups-libs dbus-glib cairo libXrender libXinerama libXt libXext libfreetype libcups libX11-xcb libnss3。若需处理中文,安装中文字体并刷新缓存:sudo fc-cache -fv。以上步骤完成后即可在 CentOS 上正常使用 LibreOffice 命令行与宏功能。
二 宏的类型与存放位置
- LibreOffice 支持两类宏:
- 文档内宏(随文档保存,使用 LibreOffice Basic 编写);
- 应用级宏(存放在用户配置目录,供所有文档调用)。
- 典型存放路径(用户级)为:~/.config/libreoffice/4/user/Scripts/。建议按语言与功能建子目录,例如:
- ~/.config/libreoffice/4/user/Scripts/python/MyMacros/
- ~/.config/libreoffice/4/user/Scripts/basic/MyMacros/
- 在图形界面中,可通过 工具 → 宏 → 运行宏 浏览与执行;也可将 .ods/.odt 文档与宏一起分发,宏会随文档保存与运行。
三 方式一 直接运行文档内或应用级宏
- 图形界面运行:打开目标文档或 LibreOffice,进入 工具 → 宏 → 运行宏,选择对应宏执行。适合调试与一次性任务。
- 命令行运行(推荐用于定时任务与无人值守):
- 基本语法:soffice --headless --invisible --nologo “macro:///path.to.Module/macroName”
- 示例(运行应用级 Python 宏):soffice --headless --invisible --nologo “macro:///python/MyMacros/hello.hello”
- 示例(运行文档内宏,需先打开文档):soffice --headless --invisible --nologo /path/to/document.ods “macro:///Standard.Module1/MyMacro”
- 说明:–headless 与 --invisible 用于无界面执行;宏 URI 的格式为 macro:///[library.]module/macro。若宏需要访问外部文件,请确保路径使用 file:// 绝对路径并具备读写权限。
四 方式二 通过监听端口远程调用宏(UNO API)
- 启动监听:soffice --headless --accept=“socket,host=localhost,port=2002;urp;” --nofirststartwizard &
- 使用 Python UNO 连接并调用宏(示例):
- 安装 Python UNO 运行环境(常见为 python3-uno 或 libreoffice-pyuno,发行版仓库名可能不同):sudo yum install -y python3-uno
- 示例脚本(将 /path/to/doc.odt 另存为 PDF):
- import uno, os
- from com.sun.star.beans import PropertyValue
- def save_as_pdf(doc_url, pdf_url):
- local_ctx = uno.getComponentContext()
- resolver = local_ctx.ServiceManager.createInstanceWithContext(“com.sun.star.bridge.UnoUrlResolver”, local_ctx)
- ctx = resolver.resolve(“uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext”)
- desktop = ctx.ServiceManager.createInstanceWithContext(“com.sun.star.frame.Desktop”, ctx)
- doc = desktop.loadComponentFromURL(doc_url, “_blank”, 0, ())
- props = (PropertyValue(Name=“FilterName”, Value=“writer_pdf_Export”),)
- doc.storeToURL(pdf_url, props)
- doc.dispose()
- if name == “main”:
- save_as_pdf(“file:///path/to/doc.odt”, “file:///path/to/doc.pdf”)
- 提示:UNO 方式适合复杂流程编排与多文档批处理;务必先启动监听,再运行脚本,脚本结束前保持 soffice 进程存活。
五 常见问题与排错
- 宏找不到或报“URI 无效”:检查宏路径与名称是否与宏 URI 一致;应用级宏应放在 Scripts 目录的对应语言子目录;文档内宏需确认模块与宏名无误。
- 无头环境中文乱码或导出异常:安装中文字体(如 wqy-zenhei、wqy-microhei),执行 fc-cache -fv,必要时在 LibreOffice 中设置默认字体。
- 权限与路径问题:命令行与宏中的文件路径建议使用绝对路径并以 file:// 开头;确保运行用户对文档与输出目录具备读写权限。
- 并发与端口冲突:同一端口只能被一个 soffice 监听,批量任务请串行或分配不同端口;启动前可用 ps -ef | grep soffice 检查是否已有实例占用。
- 依赖缺失导致崩溃或无响应:无头运行需图形相关基础库(如 libXrender、libXinerama、libXt、libXext、libfreetype、libcups、libX11-xcb、libnss3 等),按第二节补充安装可显著提升稳定性。