使用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
Run Code Online (Sandbox Code Playgroud)
使用代码段
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
Run Code Online (Sandbox Code Playgroud)
看起来代码'引发'一个例外,它会停止整个过程.删除'加注'一词足以允许覆盖单元格?我很欣赏xlwt的警告,但我认为pythonic方式是假设"我们知道我们在做什么".触摸模块时我不想破坏任何其他东西.
ktd*_*drv 47
问题是默认情况下禁用覆盖工作表数据xlwt.您必须明确允许它,如下所示:
worksheet = workbook.add_sheet("Sheet 1", cell_overwrite_ok=True)
Run Code Online (Sandbox Code Playgroud)
Ned B.撰写的内容是有价值的建议 - 除了作为xlwt分支的事实pyExcelerator,"模块的作者"是不明确的;-)
...而Kaloyan Todorov已经击中了头部.
这里有一些建议:
(1)注意您引用的代码中的以下行:
if not self.__parent._cell_overwrite_ok:
Run Code Online (Sandbox Code Playgroud)
并搜索代码_cell_overwrite_ok,你应该来Kaloyan的结论.
(2)向python-excel google-group提问(并搜索档案)
(3)查看此网站,该网站提供指向google-group和教程的链接.
背景:问题是有些人不知道他们在做什么(并且至少有一个案例很高兴被告知),xlwt从pyExcelerator继承的行为是盲目地为两个(或更多)记录写入相同的单元格,不仅导致文件臃肿而且导致混乱,因为Excel会抱怨并显示第一个写入的OpenOffice和Gnumeric将默默显示最后写入的内容.从共享字符串表中删除旧数据的所有跟踪,以便它不会浪费空间或(更糟)在文件中可见是PITA.
整个传奇都记录在谷歌组中.本教程包含有关覆盖单元格的部分.