pywin32和excel。写入大量数据时例外

时间:2012-08-06 21:35:57

标签: python excel pywin32

我目前正在尝试使用pywin32库将大量数据写入excel电子表格。作为我面临的问题的一个简单示例,请使用以下代码生成1000个单元格x 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明显慢,但我仍然很好奇导致这个错误的原因。

1 个答案:

答案 0 :(得分:3)

我明白了。

只有当用户在代码运行时与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