pywin32和excel。 写入大量数据时出现exception

我目前正在尝试使用pywin32库将大量数据写入Excel电子表格。 作为我正面临的问题的一个简单的例子采取以下代码生成一个1000单元×1000单元格乘法表。

import win32com.client from win32com.client import constants as c xl = win32com.client.gencache.EnsureDispatch("Excel.Application") xl.Visible = True Workbook = xl.Workbooks.Add() Sheets = Workbook.Sheets tableSize = 1000 for i in range(tableSize): for j in range(tableSize): Sheets(1).Cells(i+1, j+1).Value = i*j 

对于小值这个工程。 但是,对于更大的值,python程序最终崩溃的错误:

 Traceback (most recent call last): File ".\Example.py", line 16, in <module> Sheets(1).Cells(i+1, j+1).Value = i*j File "C:\PYTHON27\lib\site-packages\win32com\client\__init__.py", line 474, in __setattr__ self._oleobj_.Invoke(*(args + (value,) + defArgs)) pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146777998), None) 

我已经承认失败,因为这比xlwt慢得多,但我仍然对引起这个错误的事情感到好奇。

我想到了。

错误只发生在代码运行时用户与Excel窗口交互。 在使用excel进行任何工作之前,通过添加xl.Interactive = False ,可以避免这种情况。 如果这是在应用程序可见之前添加的,则不存在任何交互的机会。

所以最终的代码是:

 import win32com.client from win32com.client import constants as c xl = win32com.client.gencache.EnsureDispatch("Excel.Application") xl.Interactive = False xl.Visible = True Workbook = xl.Workbooks.Add() Sheets = Workbook.Sheets Sheets(1).Cells(1,2).Value = "Test" print Sheets(1).Cells(1,2).Value tableSize = 1000 for i in range(tableSize): for j in range(tableSize): Sheets(1).Cells(i+1, j+1).Value = i*j