Python – excel:写入多个单元需要时间

我正在使用win32com.client将数据写入Excel文件。 这花费了太多的时间(下面的代码模拟了我想要更新的数据量,并且需要大约2秒)。

有没有办法在一次调用中更新多个单元格(使用不同的值),而不是一个一个地填充它们? 或者可能使用更有效的不同方法?

我正在使用Python 2.7和Office 2010。

这里是代码:

from win32com.client import Dispatch xlsApp = Dispatch('Excel.Application') xlsApp.Workbooks.Add() xlsApp.Visible = True workSheet = xlsApp.Worksheets(1) for i in range(300): for j in range(20): workSheet.Cells(i+1,j+1).Value = (i+10000)*j 

几点build议:

屏幕更新,手动计算

尝试以下操作:

 xlsApp.ScreenUpdating = False xlsApp.Calculation = -4135 # manual try: # worksheet = ... for i in range(...): # finally: xlsApp.ScreenUpdating = True xlsApp.Calculation = -4105 # automatic 

一次分配几个单元格

使用VBA,您可以将范围的值设置为数组。 一次设置多个值可能会更快:

 ' VBA code ActiveSheet.Range("A1:D1").Value = Array(1, 2, 3, 4) 

我从来没有尝试过这种使用Python,我build议你尝试像这样:

 worksheet.Range("A1:D1").Value = [1, 2, 3, 4] 

一种不同的方法

考虑使用openpyxl或xlwt 。 Openpyxls允许您创build.xlsx文件,而无需安装Excel。 Xlwt为.xls文件做同样的事情。

使用了其他答案的范围build议,我这样写道:

 def writeLineToExcel(wsh,line): wsh.Range( "A1:"+chr(len(line)+96).upper()+"1").Value=line xlApp = Dispatch("Excel.Application") xlApp.Visible = 1 xlDoc = xlApp.Workbooks.Open("test.xlsx") wsh = xlDoc.Sheets("Sheet1") writeLineToExcel(wsh,[1, 2, 3, 4]) 

你也可以一次写多行:

 def writeLinesToExcel(wsh,lines): # assume that all lines have the same length wsh.Range( "A1:"+chr(len(lines)+96).upper()+str(len(lines[0]))).Value=lines writeLinesToExcel(wsh,[ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10,11,12], [13,14,15,16], ]) 

请注意,您可以使用以下代码轻松地通过数字地址设置范围:

 cl1 = Sheet1.Cells(X1,Y1) cl2 = Sheet1.Cells(X2,Y2) Range = Sheet1.Range(cl1,cl2)