libreoffice python宏

文章介绍了如何在LibreOffice中使用Python编写宏,包括宏的位置、创建方法以及如何使用XSCRIPTCONTEXT全局对象访问UNOAPI。提供了示例代码,如显示Python版本信息和在Calc中插入文本。用户可以通过‘工具-宏-管理宏-python’来运行这些宏。
摘要由CSDN通过智能技术生成

一、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 UNOBasic 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宏
选择函数名称,然后点击运行执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值