如何通过pyuno从LibreOffice calc中提取当前选定的单元格范围?

时间:2015-02-18 20:28:51

标签: python openoffice-calc libreoffice-calc pyuno

在LibreOffice / OpenOffice calc python宏中使用pyuno时,我希望能够选择一系列单元格,并且当宏运行时,对于所有单元格数据(例如,作为某些可迭代对象)能够在python脚本中检索,以便可以操作它。我几乎找不到任何关于此的文档,并欢迎一些示例代码来演示如何执行此操作。

2 个答案:

答案 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