Collabora Office 21.06 帮助
从「input()、print()、repr()、str() 等功能。
...」菜单运行 Python 宏时,Python 标准输出文件不可用。展示模块的输出内容需要 Python 交互式控制台。Python shell 提供「替代 Python 脚本管理器」(APSO) 扩展在其 apso_utils 模块提供了 msgbox() 函数。
Collabora Office Basic 提供 InputBox()、Msgbox() 与 Print() 屏幕输入/输出函数。现有的 Python 替代品有的依赖 Collabora Office API 抽象窗口工具集 (Abstract Windowing Toolkit),有的依赖 Python 向 Basic 的函数调用。后者提供有意接近 Basic 的语法,同时使用 Python 模块与 Basic 模块。API 脚本框架被用于执行 Basic、BeanShell、JavaScript 以及 Python 的跨语言函数调用。
MsgBox(txt, buttons=0, title=None)
InputBox(txt, title=None, default=None)
Print(txt)
>>> import screen_io as ui
>>> reply = ui.InputBox('Please enter a phrase', title='Dear user', defaultValue="here..")
>>> rc = ui.MsgBox(reply, title="Confirmation of phrase")
>>> age = ui.InputBox('How old are you?', title="Hi")
>>> ui.Print(age)
将 Python 模块「screen_io」复制到「我的宏」,位于 <UserProfile>/Scripts/python/pythonpath,
将 Basic 模块「uiScripts」复制到「我的宏」标准 Basic 库,
重新启动 Collabora Office。
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def MsgBox(prompt: str, buttons=0, title='LibreOffice') -> int:
""" 显示含有消息的对话框,并返回一个值。"""
xScript = _getScript("_MsgBox")
res = xScript.invoke((prompt,buttons,title), (), ())
return res[0]
def InputBox(prompt: str, title='LibreOffice', defaultValue='') -> str:
""" 在对话框中显示提示,用户可以在对话框内输入文字。"""
xScript = _getScript("_InputBox")
res = xScript.invoke((prompt,title,defaultValue), (), ())
return res[0]
def Print(message: str):
"""在对话框中输出指定字符串或数字表达式。"""
xScript = _getScript("_Print")
xScript.invoke((message,), (), ())
import uno
from com.sun.star.script.provider import XScript
def _getScript(script: str, library='Standard', module='uiScripts') -> XScript:
sm = uno.getComponentContext().ServiceManager
mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
scriptPro = mspf.createScriptProvider("")
scriptName = "vnd.sun.star.script:"+library+"."+module+"."+script+"?language=Basic&location=application"
xScript = scriptPro.getScript(scriptName)
return xScript
Option Explicit
Private Function _MsgBox( prompt As String, Optional buttons As Integer, _
Optional title As String ) As Integer
_MsgBox = MsgBox( prompt, buttons, title )
End Function
Private Function _InputBox( prompt As String, Optional title As String, _
Optional default As String) As String
_InputBox = InputBox( prompt, title, default )
End Function
Private Sub _Print( msg As String )
Print msg
End Sub