使用Pyuno对Calc文档中的单元格范围进行排序 [英] Sorting cell range in a calc document with pyuno
问题描述
使用pyuno打开LibreOffice calc文档,定义一个单元格范围,然后对它进行排序.这是代码:
With pyuno I open a LibreOffice calc document, I define a range of cells and I want to sort it. Here is the code:
import os
import uno
# open a calc document
# (it is assumed that LibreOffice is launched with the command line:
# soffice -accept="socket,host=localhost,port=2002;urp")
local = uno.getComponentContext()
resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)
context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)
url = uno.systemPathToFileUrl(os.path.abspath("c:/aaa/essai.xls"))
doc = desktop.loadComponentFromURL(url,"_blank", 0, ())
# range to be sorted
range = doc.Sheets.getByIndex(0).getCellRangeByPosition(0,0,4,4)
# use the first column for the sort key
colDescr = uno.createUnoStruct(
'com.sun.star.table.TableSortField')
colDescr.Field = 0
# sort descriptor
sortDescr = range.createSortDescriptor()
for x in sortDescr:
if x.Name == 'SortFields':
x.Value = (colDescr,)
break
else:
raise KeyError('SortFields')
# sort ...
range.sort(sortDescr)
此代码已正确解释,但不执行任何操作(calc文档中未对行进行排序) 我错了吗?我认为sortDescr具有正确的类型(PropertyValue元组),但我不确定. 我使用Windows 7,LibreOffice 4.3.4.1,Python 3.3 谢谢您的回答.
This code is correctly interpreted but does nothing (the rows are not sorted in the calc document) Am'I wrong? I think that sortDescr has the right type (PropertyValue tuple) but I'm not sure. I use Windows 7, LibreOffice 4.3.4.1, Python 3.3 Thank you for your answers.
推荐答案
更改行: x.Value =(colDescr,)
Change the row: x.Value = (colDescr,)
通过: x.Value = uno.Any('[] com.sun.star.table.TableSortField',(aCriterios,))
By: x.Value = uno.Any('[]com.sun.star.table.TableSortField',(aCriterios,))
这篇关于使用Pyuno对Calc文档中的单元格范围进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!