使用Datanitro对Excel范围进行排序

时间:2015-09-29 14:17:33

标签: excel excel-vba datanitro vba

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

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

Sub Sort_1(strDataRange As Range, keyRange As Range)

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

End Sub

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

VBA('Sort_1', [Range('A5:IF20'), Range('M5')])

此外,如果将两个参数作为字符串传递,我会得到一个NitroException:无法运行excel宏,大概是因为子例程需要Range对象而不是字符串。

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

有什么建议吗?我更倾向于使用VBA路由,因为该方法已在VBA中很好地定义,并且我不必浪费时间创建任何其他python方法。

1 个答案:

答案 0 :(得分:1)

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

例如,这是对表进行排序的一种方法:

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)会按A1:E10列对A进行排序。

在实践中,您可以在一行中执行此操作:

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