一、python宏位置
跟basic宏的位置一样,也是三个位置:
(1)我的宏
~/.config/libreoffice/4/user/Scripts/python
(2)应用程序宏
/usr/lib64/libreoffice/share/Scripts/python
(3)嵌在文档中的宏
需要解压文档
python宏无法用管理器新建,只能手动创建
二、编写python宏
LibreOffice带有一个内置的Basic编程语言宏编辑器。但对于Python来说,它不起作用。因此,您必须在单独的编辑器中编写 Python 代码。
可使用您偏好的编辑器来编辑。
可以安装apso扩展,设置偏好编辑器
https://extensions.libreoffice.org/en/extensions/show/apso-alternative-script-organizer-for-python
也要了解四个东西:
参考教程
https://help.libreoffice.org/latest/zh-CN/text/sbasic/python/main0000.html?&DbPAR=BASIC&System=UNIX
python语言
python库函数
libreoffice api
对话框
libreoffice提供给python的api,主要是uno.py。
为了方便,提供了一个全局对象XSCRIPTCONTEXT,可从XSCRIPTCONTEXT单对象推断出所有UNO对象。
当然也可以不使用全局对象,而是直接使用uno.py里面的函数,不过不如使用XSCRIPTCONTEXT方便。
使用XSCRIPTCONTEXT
方法 | 描述 | 在Basic中映射为 |
---|---|---|
getDocument() | 当前文档 | ThisComponent |
getDesktop() | 应用程序 | StarDesktop |
getComponentContext() | 创建其他组件的组件 | GetDefaultContext |
使用 uno.py
函数 | 描述 | 在Basic中映射为 |
---|---|---|
absolutize() | 从指定url返回文件的绝对url。 | |
createUnoStruct() | 根据typeName创建UNO结构或异常。 | CreateUNOStruct() |
fileUrlToSystemPath() | 返回系统路径。 | ConvertFromURL() |
getClass() | 返回具体UNO异常、结构或接口的类。 | |
getComponentContext() | 返回用于初始化Python运行时的UNO组件上下文。 | GetDefaultContext() |
Enum() getConstantByName() | 通过精确名称查找IDL常量的值。 | 参见「API常量组」 |
isInterface() | 当obj为UNO接口的类时返回True。 | |
systemPathToFileUrl() | 返回指定系统路径的文件URL。 | ConvertToURL() |
Python UNO | Basic UNO |
---|---|
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( … , ctx) | CreateUnoService() |
参见《打开对话框》 | CreateUnoDialog() |
参见《创建监听器》 | CreateUnoListener() |
参见「UNO数据类型」 | CreateUnoValue() CreateObject() |
EqualUnoObjects() | |
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() | GetProcessServiceManager() |
def hasUnoInterfaces(obj, *interfaces): return set(interfaces).issubset(t.typeName for t in obj.Types) | HasUnoInterfaces() |
IsUnoStruct() | |
ctx = uno.getComponentContext() smgr = ctx.getServiceManager() DESK = ‘com.sun.star.frame.Desktop’ desktop = smgr.createInstanceWithContext(DESK , ctx) | StarDesktop |
desktop = smgr.createInstanceWithContext(DESK , ctx) doc = desktop.CurrentComponent | ThisComponent |
示例1:
myscript.py,创建一个方法PythonVersion:
import sys
def PythonVersion(*args):
odoc = XSCRIPTCONTEXT.getDocument()
otext = odoc.Text
orange = otext.End
orange.String = "The Python version is %s.%s.%s" % sys.version_info[:3] + " and the executable path is " + sys.executable
return None
g_exportedScripts = PythonVersion,
默认所有方法都将导出,但我们也可以使用g_exportedScripts指定要导出的方法
示例2:
将“hello world”添加到LibreOffice Calc工作簿的第一个工作表的第一个单元格A1。
创建一个文件并将其保存为 “HelloWorldCalc.py” 到 ~/.config/libreoffice/4/user/Scripts/python(适用于Linux)和C:\Users<user>\AppData\Roaming\LibreOffice\4\user\Scripts\python for Windows。
def HelloWorldPythonCalc():
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet =oDoc.getSheets().getByIndex(0)
oCell = oSheet.getCellByPosition(0,0)
oCell.String = 'Hello World via Python'
return None
三、运行python宏
选择「工具 - 宏 - 管理宏 - python」来执行Python脚本
在“Python宏”窗口中,展开“我的宏”部分。您应该会看到列出的Python文件名和函数名称。
在LibreOffice中选择并运行python宏
选择函数名称,然后点击运行执行