Python XLWT пытается перезаписать обходное решение ячейки

Используя модуль 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 путь состоит в том, чтобы предположить, что "мы знаем то, что мы делаем". Я не хочу повреждать что-либо еще в касании модуля.

13
задан PPTim 21 April 2010 в 00:00
поделиться

3 ответа

Проблема в том, что перезапись данных рабочего листа отключена по умолчанию в xlwt . Вы должны разрешить это явно, например:

worksheet = workbook.add_sheet("Sheet 1", cell_overwrite_ok=True)
47
ответ дан 1 December 2019 в 17:27
поделиться

Вам необходимо связаться с автором модуля. Простое удаление рейза вряд ли сработает. Я предполагаю, что это приведет к другим проблемам в будущем. Например, более поздний код может предполагать, что любая заданная ячейка только один раз находится в промежуточном представлении.

1
ответ дан 1 December 2019 в 17:27
поделиться

То, что написал Нед Б., является ценным советом - за исключением того факта, что, поскольку 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.

Вся сага записана в гугл-группе. В учебное пособие входит раздел о перезаписи ячеек.

5
ответ дан 1 December 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: