首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Datanitro对Excel范围进行排序

用Datanitro对Excel范围进行排序
EN

Stack Overflow用户
提问于 2015-09-29 14:17:33
回答 1查看 149关注 0票数 1

我正在尝试使用Datanitro对excel中的一系列单元格进行排序。看起来datanitro没有内置的排序方法,所以我的选项是在python中创建一个,这是Datanitro似乎已经完成的这里,或者使用内置的VBA方法并通过datanitro从python调用该方法。

用于排序的一个简单的VBA子程序如下:

代码语言:javascript
复制
Sub Sort_1(strDataRange As Range, keyRange As Range)

strDataRange.Sort Key1:=keyRange, Header:=xlNo, Order1:=xlDescending

End Sub

现在,我只需要从python调用它,并传递子例程两个范围对象。但是,我的python中的以下代码生成一个NameError:“Range”未定义

代码语言:javascript
复制
VBA('Sort_1', [Range('A5:IF20'), Range('M5')])

此外,如果将两个参数作为字符串传递,我将得到一个NitroException:未能运行excel宏,这可能是因为子例程期望的是范围对象而不是字符串。

一个简单的解决方法是在子例程中定义范围,但是在我的python代码中,变量不能是动态的。

有什么建议吗?我更喜欢使用VBA路由,因为在VBA中已经很好地定义了该方法,而且我不必浪费时间创建任何额外的python方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-29 14:50:38

DataNitro的理念是尽可能使用常规Python特性,主要是因为Python具有大量的功能。

例如,有一种方法可以对表进行排序:

代码语言:javascript
复制
from operator import itemgetter

def table_sort(table_range, column):
    data = table_range.table
    sorted_data = sorted(data, key = itemgetter(column))
    table_range.data = sorted_data

例如,table_sort(CellRange("A1:E10"), 0)将按列AA1:E10进行排序。

在实践中,您可以在一行中这样做:

代码语言:javascript
复制
def table_sort(table_range, column):
    table_range.table = sorted(table_range.table, key = itemgetter(column))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32846358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档