Mic*_*son 11
您可以读取整个列,而无需使用该Range集合从工作表中进行迭代.如果performacne是任何问题,你永远不Cells应该使用.Python使用win32com模块与Excel COM库进行交互.每当您使用Python和COM(Excel,PowerPoint,Acess,ADODB等)时,您最大的性能限制之一将是COM和Python之间的IO.使用该Range方法,您只需进行一次COM方法调用,同时Cells为每行创建一个.如果你在VBA或.NET中做同样的事情,这也会更快
在下面的测试中,我在单元格A1到A2000中创建了一个包含10个随机字符的工作表.然后,我使用Range和Cells将这些值提取到列表中.
import win32com.client
app = win32com.client.Dispatch("Excel.Application")
s = app.ActiveWorkbook.Sheets(1)
def GetValuesByCells():
startTime = time.time()
vals = [s.Cells(r,1).Value for r in range(1,2001)]
return time.time() - startTime
def GetValuesByRange():
startTime = time.time()
vals = [v[0] for v in s.Range('A1:A2000').Value]
return time.time() - startTime
>>> GetValuesByRange()
0.03600001335144043
>>> GetValuesByCells()
5.27400016784668
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Range比Cell快2个数量级(146x).请注意,Range方法返回一个2D列表,其中每个内部列表都是一行.列表迭代转换vals为2D列表,其中内部列表是列.