pywin32和Excel。 写入大量数据时异常(pywin32 and excel. Exce

2019-07-30 19:40发布

我目前正在尝试将大量的数据写入到使用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慢,但我仍然好奇发生了什么导致此错误。

Answer 1:

我想到了。

只有当用户与Excel窗口交互,而代码正在运行时发生错误。 通过添加xl.Interactive = False做任何工作与Excel在此之前是可以避免的。 如果添加应用程序之前,是可见的,没有任何互动的机会。

所以最后的代码是:

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


文章来源: pywin32 and excel. Exception when writing large quantities of data