在LibreOffice / OpenOffice calc python宏中使用pyuno时,我希望能够选择一系列单元格,并且当宏运行时,对于所有单元格数据(例如,作为某些可迭代对象)能够在python脚本中检索,以便可以操作它。我几乎找不到任何关于此的文档,并欢迎一些示例代码来演示如何执行此操作。
答案 0 :(得分:2)
经过一段非常痛苦的反复试验(感谢几乎没有任何关于pyuno使用的文档和示例 - 如果我忽略了某些事情,请纠正我),我最终得到了以下代码我之后的事情:
import uno
doc = XSCRIPTCONTEXT.getDocument()
def mymodule():
ctrlr = doc.CurrentController
sel = ctrlr.getSelection()
x = sel.getDataArray()
# now the data is available as nested tuples in x, so do something with it
file('/tmp/out', 'w').write(repr(x))
这可以放入python文件中,并存储(至少使用Ubuntu 14.04)在~/.config/libreoffice/4/user/Scripts/python
目录中,然后只要安装了libreoffice-script-provider-python
包,它就可以从在LibreOffice Calc中通过工具 - >宏 - >运行宏菜单选项。或者可以使用工具 - >自定义 - >键盘对话框将其绑定到键盘快捷键。
有关更完整的示例,允许用户将LibreOffice Calc中的数据加载到Octave中进行进一步分析,请参阅this pyuno script。
答案 1 :(得分:0)
或者你可以尝试这样的事情,我认为这更容易被理解。
desktop = XSCRIPTCONTEXT.getDesktop()
model = desktop.getCurrentComponent()
try:
sheets = model.getSheets()
except AttributeError:
raise Exception("This script is for Calc Spreadsheets only")
#sheet = sheets.getByName('Sheet1')
sheet = model.CurrentController.getActiveSheet()
oSelection = model.getCurrentSelection()
oArea = oSelection.getRangeAddress()
first_row = oArea.StartRow
last_row = oArea.EndRow
first_col = oArea.StartColumn
last_col = oArea.EndColumn