排序Excel范围与Datanitro



我正在尝试使用Datanitro在excel中排序一系列单元格。它看起来不像Datanitro有一个内置的排序方法,所以我的选择是要么在python中创建一个,这是Datanitro似乎已经在这里做的,或者使用内置的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方法。

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

在实践中,您将在一行中完成:

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

最新更新