用Datanitro对Excel范围进行sorting
我正在尝试使用Datanitro在Excel中对一系列单元格进行sorting。 它看起来不像Datanitro有一个内置的sorting方法,所以我的select是要么在Python中创build一个,这是datanitro似乎在这里做了什么 ,或者使用内置的VBA方法,并从python调用该方法通过datanitro。
一个简单的VBAsorting子程序如下:
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')])
此外,如果将两个参数作为string传递,我将得到一个NitroException:未能运行excelmacros,大概是因为该子例程需要Range对象而不是string。
一个简单的解决方法是定义子程序中的范围,但是不能用我的python代码中的variables来dynamic变化。
有什么build议么? 我宁愿去VBA路由,因为该方法已经在VBA中很好的定义了,我不必浪费时间创build任何额外的Python方法。
DataNitro的理念是尽可能使用常规的Pythonfunction,主要是因为Python有很多function。
例如,下面是对表格进行sorting的一种方法:
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
sortingA1:E10
。
在实践中,你会这样做在一行:
def table_sort(table_range, column): table_range.table = sorted(table_range.table, key = itemgetter(column))