2014-11-24 69 views
0

使用pyuno我打開一個LibreOffice calc文檔,我定義了一系列單元格並對其進行排序。下面是代碼:使用pyuno對calc文檔中的單元格範圍進行排序

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) 

此代碼是正確的解釋,但不執行任何操作(該行不計算文檔中排序) Am'I錯了嗎?我認爲sortDescr有正確的類型(PropertyValue元組),但我不確定。 我使用Windows 7,LibreOffice 4.3.4.1,Python 3.3 謝謝你的回答。

回答

0

更改行: x.Value =(colDescr,)

通過: x.Value = uno.Any( '[] com.sun.star.table.TableSortField',(aCriterios,) )

相關問題