Pywin32 Excel 写入限制?

1 投票
1 回答
987 浏览
提问于 2025-04-16 18:35

我正在使用pywin32,通常的做法是通过获取一些范围对象,然后用下面的方式写入数据到Excel:

 range.Value=my_data

(这和VBA的语法是一样的)

现在,如果我有一组比较大的单元格(超过6000个字符),并且我一次性将它们的值写入一个范围对象,有时候会在这些单元格中的某一个抛出异常(但单独写入那个单元格是可以的)。

你知道在Excel中写入范围操作时有什么限制我需要注意的吗?

这些异常看起来像这样:

Traceback (most recent call last):
  File "test2.py", line 9, in <module>
    e.write_area([tuple("a"*10000 for i in range(20))]*20, sheet="Tabelle1")
  File "excel_com.py", line 209, in write_area
    self.get_range(col, row, col+num_col-1, row+num_row-1, sheet=sheet).Value=data
  File "C:\Python31\lib\site-packages\win32com\client\dynamic.py", line 550, in __setattr__
    self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value)
pywintypes.com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, None, None, None, 0, -2146827284), None)

or

Traceback (most recent call last):
  File "test2.py", line 9, in <module>
    e.write_area([tuple("a"*1000 for i in range(20))]*10000, sheet="Tabelle1")
  File "excel_com.py", line 209, in write_area
    self.get_range(col, row, col+num_col-1, row+num_row-1, sheet=sheet).Value=data
  File "C:\Python31\lib\site-packages\win32com\client\dynamic.py", line 521, in __setattr__
    debug_attr_print("SetAttr called for %s.%s=%s on DispatchContainer" % (self._username_, attr, repr(value)))
MemoryError

其中excel_com.py是我的一个模块。这些异常是否出现取决于写入数据的列、行和单元格的大小。不过我不知道背后的系统是怎样的 :(

1 个回答

0

把一个数组传到某个范围并没有一个固定的大小限制。这个限制主要取决于数组需要的内存、电脑的内存(RAM)等等。如果你觉得数据量可能会很大,最好把数组分成小块,然后一个一个地写入。

撰写回答