1

我正在尝试使用 Datanitro 对 excel 中的一系列单元格进行排序。看起来 Datanitro 没有内置的排序方法,所以我的选择是在 python 中创建一个,这就是 datanitro 在这里所做的,或者使用内置的 VBA 方法并从 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' is not defined

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

此外,如果将两个参数都作为字符串传递,我会得到 NitroException: failed to run excel 宏,可能是因为子例程需要 Range 对象而不是字符串。

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

有什么建议么?我更愿意走 VBA 路线,因为该方法已经在 VBA 中很好地定义了,我不必浪费时间创建任何额外的 python 方法。

4

1 回答 1

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:E10A

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

def table_sort(table_range, column):
    table_range.table = sorted(table_range.table, key = itemgetter(column))
于 2015-09-29T14:50:38.013 回答