Sorting cell range in a calc document with pyuno

好久不见. 提交于 2019-12-13 02:03:39

问题


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)

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.


回答1:


Change the row: x.Value = (colDescr,)

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



来源:https://stackoverflow.com/questions/27103022/sorting-cell-range-in-a-calc-document-with-pyuno

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!