Используя модуль Python xlwt, пишущий в ту же ячейку дважды бросает ошибку:
Message File Name Line Position
Traceback
<module> S:\********
write C:\Python26\lib\site-packages\xlwt\Worksheet.py 1003
write C:\Python26\lib\site-packages\xlwt\Row.py 231
insert_cell C:\Python26\lib\site-packages\xlwt\Row.py 150
Exception: Attempt to overwrite cell: sheetname=u'Sheet 1' rowx=1 colx=12
с фрагментом кода
def insert_cell(self, col_index, cell_obj):
if col_index in self.__cells:
if not self.__parent._cell_overwrite_ok:
msg = "Attempt to overwrite cell: sheetname=%r rowx=%d colx=%d" \
% (self.__parent.name, self.__idx, col_index)
raise Exception(msg) #row 150
prev_cell_obj = self.__cells[col_index]
sst_idx = getattr(prev_cell_obj, 'sst_idx', None)
if sst_idx is not None:
self.__parent_wb.del_str(sst_idx)
self.__cells[col_index] = cell_obj
Похож на код 'raise'es исключение, которое останавливает весь процесс. Действительно ли удаление является сроком 'повышения' достаточно для обеспечения перезаписи ячеек? Я ценю предупреждение xlwt, но я думал, что pythonic путь состоит в том, чтобы предположить, что "мы знаем то, что мы делаем". Я не хочу повреждать что-либо еще в касании модуля.
Проблема в том, что перезапись данных рабочего листа отключена по умолчанию в xlwt
. Вы должны разрешить это явно, например:
worksheet = workbook.add_sheet("Sheet 1", cell_overwrite_ok=True)
Вам необходимо связаться с автором модуля. Простое удаление рейза
вряд ли сработает. Я предполагаю, что это приведет к другим проблемам в будущем. Например, более поздний код может предполагать, что любая заданная ячейка только один раз находится в промежуточном представлении.
То, что написал Нед Б., является ценным советом - за исключением того факта, что, поскольку xlwt
является форком pyExcelerator
, " автор модуля "некорректно определен; -)
... и Калоян Тодоров попал в точку.
Вот еще один совет:
(1) Обратите внимание на следующую строку в коде, который вы процитировали:
if not self.__parent._cell_overwrite_ok:
и найдите в коде _cell_overwrite_ok
, и вы должны прийти к заключению Калояна.
(2) Задавайте вопросы (и ищите в архивах) python-excel google-group
(3) Посетите этот сайт , который дает указатели на группу google и руководство.
Предыстория: проблема заключалась в том, что некоторые люди не знали, что они делают (и, по крайней мере, в одном случае были рады услышать об этом), а поведение, которое xlwt унаследовало от pyExcelerator, заключалось в том, чтобы вслепую писать два (или более) записи для одной и той же ячейки, что приводило не только к раздуванию файлов, но и к путанице, потому что Excel жаловался и показывал первое записанное, а OpenOffice и Gnumeric молча отображали последнее записанное. Удаление всех следов старых данных из таблицы общих строк, чтобы они не тратили впустую пространство или (что еще хуже) не отображались в файле, было PITA.
Вся сага записана в гугл-группе. В учебное пособие входит раздел о перезаписи ячеек.