使用 pyuno 对 calc 文档中的单元格范围进行排序

Posted

技术标签:

【中文标题】使用 pyuno 对 calc 文档中的单元格范围进行排序【英文标题】:Sorting cell range in a calc document with pyuno 【发布时间】:2014-11-24 10:48:56 【问题描述】:

我使用 pyuno 打开一个 LibreOffice 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)

此代码被正确解释但什么也不做(行在计算文档中未排序) 我错了吗?我认为 sortDescr 具有正确的类型(PropertyValue 元组),但我不确定。 我使用 Windows 7、LibreOffice 4.3.4.1、Python 3.3 谢谢你的回答。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于使用 pyuno 对 calc 文档中的单元格范围进行排序的主要内容,如果未能解决你的问题,请参考以下文章

LibreOffice Calc:如何一次突出显示单元格范围的最大值?

excel calc定义单元格范围

OpenOffice Calc:计算单元格范围内的唯一字符串

对单元格范围进行排序,win32com.client

如何在 LibreOffice Calc 中使用 PyUNO 更改单元格边框的 LineWidth?

将单元格范围复制到新位置