Aar*_*n S 5 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
Run Code Online (Sandbox Code Playgroud)
对于小值,这有效。但是,对于较大的值,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)
Run Code Online (Sandbox Code Playgroud)
我已经承认失败,因为它比 xlwt 慢得多,但我仍然很好奇是什么导致了这个错误。
我想到了。
该错误仅在用户在代码运行时与 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10315 次 |
| 最近记录: |