Excel使用win32com和python

Nis*_* Hp 2 python win32com

我想知道如何使用win32com客户端为python迭代excel表而不读取整个列.

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列表,其中内部列表是列.