请选择 进入手机版 | 继续访问电脑版

LibreOffice 中文社区

 找回密码
 马上加入

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
开启左侧

使用 7.2 版本中的新功能 ScriptForge,在 Python 中调用 LibreOffice

[复制链接]
高原之狼 发表于 2021-9-19 19:26:24 | 显示全部楼层 |阅读模式
本帖最后由 高原之狼 于 2021-9-19 19:31 编辑

OpenOffice/LibreOffice 支持用 Python 编写宏是一项特有的功能,suokunlong 已经有一篇主页博客上的文章介绍 LibreOffice 中用 Python 调用 LibreOffice API 对文本文档进行操作。

我这个贴子是在那篇文章的基础上介绍一个 LibreOffice 新版本中的功能——ScriptForge 宏代码库。这是经过 LibreOffice 的宏团队合作开发,在 7.1 版本正式加入的功能,在 7.2 版本又在原有 BASIC 宏的基础上添加了 Python 支持。详细的介绍我就不在这里多说了,大家可以自己去看英文的官方文档。我在这里贴一个和博客文章功能大致相同,实现创建 Writer 文本文档、以不同格式保存或导出、添加密码保护这些操作的 Python 脚本:
[Python] 纯文本查看 复制代码
from scriptforge import ScriptForge, CreateScriptService

# 和已运行的 LibreOffice 建立套接字连接

ScriptForge( hostname="localhost", port=2002 )

# 创建空白文档并输入内容

doc = CreateScriptService( "UI" ).CreateDocument( "Writer" )
text = doc.XComponent.Text
cursor = text.createTextCursor()

text.insertString( cursor, "Hello World", 0 )
doc.RunCommand( "InsertPara" )
text.insertString( cursor, "Hello World 2", 0 )

# 指定文档标题

doc.Title = "Hello World"

# 保存为各种不同格式的文件

path_odt = r"C:\Users\高原之狼\Desktop\Hello World.odt"
path_docx = r"C:\Users\高原之狼\Desktop\Hello World.docx"
path_pdf = r"C:\Users\高原之狼\Desktop\Hello World.pdf"
path_odt_protected = r"C:\Users\高原之狼\Desktop\Hello World (with password).odt"

doc.SaveAs( path_odt, filtername="writer8" )
doc.SaveCopyAs( path_docx, filtername="MS Word 2007 XML" )
doc.SaveCopyAs( path_pdf, filtername="writer_pdf_Export" )
doc.SaveCopyAs( path_odt_protected, password="123456", filtername="writer8" )

# 关闭文档

doc.CloseDocument()

使用的方式和博客文章里是一样的,以我测试的 Windows 下为例,先用套接字参数启动 LibreOffice:
[PowerShell] 纯文本查看 复制代码
cd C:\Programs\LibreOffice\7.2.1\program
.\soffice.exe --accept="socket,host=localhost,port=2002;urp;"
然后用 LibreOffice 安装路径下自带的 Python(Linux 下的 LibreOffice 也有时不自带 Python,参看我在博客文章下的留言)运行该脚本即可:
[PowerShell] 纯文本查看 复制代码
.\python.exe script.py

这个代码库当然没有 suokunlong 介绍的使用 PropertyValue 属性直接调用 API 那么强大,但是优点在于界面简洁,常用功能易学易记。如果不需要非常深入到文档内部的数据处理,而只是文件层级的操作以及简单菜单命令操作(不是涉及到对话框的复杂命令)的话,选用 ScriptForge 还是很方便合适的。

以上代码和步骤在 Windows 10 21H1 和 LibreOffice 7.2.1 下测试通过。欢迎大家试用、讨论和指正。

suokunlong 发表于 2021-9-21 11:08:00 | 显示全部楼层
感谢楼主。我更改了楼主代码中的路径部分,使用 master 分支在 Fedora 34 上测试通过。
开放,包容,奉献。
*滑块验证:
您需要登录后才可以回帖 登录 | 马上加入

本版积分规则

Archiver|手机版|小黑屋|LibreOffice 中文社区 ( 粤ICP备13080851号-4 )

GMT+8, 2021-10-28 13:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表