Python用のwin32comクライアントを使用して、Excelシートから反復せずに列全体を読み取る方法を知りたかった.
質問する
22148 次
3 に答える
13
Range
コレクションを使用して、シートから反復せずに列全体を読み取ることができます。にきびが気になる場合は、絶対に使用しCells
ないでください。Python は、win32com モジュールを使用して Excel COM ライブラリと対話します。Python と COM (Excel、PowerPoint、Acess、ADODB など) を使用するときは常に、COM と Python 間の IO が最大のパフォーマンス制約の 1 つになります。このRange
メソッドを使用すると、COM メソッド呼び出しを 1 つだけ行いCells
ますが、行ごとに 1 つ作成します。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
この場合、Range は Cells よりも 2 桁 (146 倍) 高速です。Range メソッドは、各内部リストが行である 2D リストを返すことに注意してください。リストの反復vals
は、内部リストが列である 2D リストに転置されます。
于 2013-09-03T14:46:32.527 に答える