2014-11-24 3 views
0

С pyuno Я открываю документ LibreOffice calc, я определяю диапазон ячеек, и я хочу его отсортировать. Вот код:Сортировка диапазона ячеек в документе с pyuno

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 tuple), но я не уверен. Я использую Windows 7, LibreOffice 4.3.4.1, Python 3.3 Благодарим вас за ответы.

ответ

0

Изменение строки: x.Value = (colDescr,)

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

Смежные вопросы