如何通过 pyuno 在 LibreOffice calc 中提取当前选定的单元格范围?
How can you extract the currently-selected range of cells in LibreOffice calc via pyuno?
在 LibreOffice / OpenOffice calc python 宏中使用 pyuno 时,我只想能够 select 一系列单元格,当宏为 运行 时,以便能够在 python 脚本中检索所有单元格数据(例如,作为一些可迭代对象),以便可以对其进行操作。我几乎找不到任何关于此的文档,欢迎提供一些示例代码来演示如何执行此操作。
经过一段非常痛苦的试验和错误时间(由于在任何地方使用 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文件里,存放在~/.config/libreoffice/4/user/Scripts/python
目录下(至少用Ubuntu14.04),然后只要libreoffice-script-provider-python
包安装后,可以通过 Tools->Macros->运行 Macro 菜单选项从 LibreOffice Calc 中 运行。或者可以使用 Tools->Customize->Keyboard 对话框将其绑定到键盘快捷键。
有关允许将数据从 LibreOffice Calc 加载到 Octave 以供进一步分析的更完整示例,请参阅 this pyuno script。
或者你也可以这样试试,我觉得比较容易理解
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
在 LibreOffice / OpenOffice calc python 宏中使用 pyuno 时,我只想能够 select 一系列单元格,当宏为 运行 时,以便能够在 python 脚本中检索所有单元格数据(例如,作为一些可迭代对象),以便可以对其进行操作。我几乎找不到任何关于此的文档,欢迎提供一些示例代码来演示如何执行此操作。
经过一段非常痛苦的试验和错误时间(由于在任何地方使用 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文件里,存放在~/.config/libreoffice/4/user/Scripts/python
目录下(至少用Ubuntu14.04),然后只要libreoffice-script-provider-python
包安装后,可以通过 Tools->Macros->运行 Macro 菜单选项从 LibreOffice Calc 中 运行。或者可以使用 Tools->Customize->Keyboard 对话框将其绑定到键盘快捷键。
有关允许将数据从 LibreOffice Calc 加载到 Octave 以供进一步分析的更完整示例,请参阅 this pyuno script。
或者你也可以这样试试,我觉得比较容易理解
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