Pywin32 Excel записывает ограничения? - PullRequest
1 голос
/ 30 мая 2011

Я использую 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 голосов
/ 03 декабря 2011

Не существует фиксированного размера для переноса массива в диапазон. Это зависит больше от объема памяти, требуемой для массива, оперативной памяти и т. Д. Если есть вероятность, что объем данных велик, лучше разбить массив на куски и записать их по одному за раз.

...