在使用python下编辑excel文件的模块保存xls文件的修改时,报出如下错误
(其实吧我把问题解决了才想起了写个记录的,实际的报错内容没copy下来,这段是网上别人一样的错误)
File "/usr/local/lib/python2.7/dist-packages/xlwt/Workbook.py", line 662, in save
doc.save(filename,self.get_biff_data())
File "/usr/local/lib/python2.7/dist-packages/xlwt/Workbook.py", line 630, in get_biff_data
before += self.all_fonts_num_formats_xf_styles_rec()
File "/usr/local/lib/python2.7/dist-packages/xlwt/Workbook.py", line 533, in __all_fonts_num_formats_xf_styles_rec
return self.__styles.get_biff_data()
File "/usr/local/lib/python2.7/dist-packages/xlwt/Style.py", line 183, in get_biff_data
result += self._all_num_formats()
File "/usr/local/lib/python2.7/dist-packages/xlwt/Style.py", line 208, in _all_num_formats
result += NumberFormatRecord(fmtidx, fmtstr).get()
File "/usr/local/lib/python2.7/dist-packages/xlwt/BIFFRecords.py", line 789, in __init
ufmtstr = upack2(fmtstr)
File "/usr/local/lib/python2.7/dist-packages/xlwt/UnicodeUtils.py", line 50, in upack2 us = unicode(s, encoding)
TypeError: coercing to Unicode: need string or buffer, NoneType found
在经历多番的查找解决方法和尝试中终于找到了靠谱的解决方法
在上面贴出的报错的内容中,标记部分就是问题所在的根源,这个文件的部分内容如下
1 def upack2(s, encoding='ascii'):
2 # If not unicode, make it so.
3 if isinstance(s, unicode_type):
4 us = s
5 else:
6 us = unicode(s, encoding)
7 # Limit is based on number of content characters
8 # (not on number of bytes in packed result)
红色部分没有涵盖当“s”为None时的情况(没想到官方的模块也有问题啊)
于是我们对这部分进行补充修改,结果如下
1 def upack2(s, encoding='ascii'):
2 # If not unicode, make it so.
3 '''
4 if isinstance(s, unicode_type):
5 us = s
6 else:
7 us = unicode(s, encoding)
8 '''
9 if isinstance(s, unicode):
10 us = s
11 elif s is not None:
12 us = unicode(s, encoding)
13 else:
14 us = unicode('', encoding)
15 # Limit is based on number of content characters
16 # (not on number of bytes in packed result)
为了方便日后出现问题需要回退,建议将原内容注释
修改后保存,再次执行代码就OK了
解决办法源自http://blog.sina.com.cn/s/blog_7407815a0101o7oa.html所引用的https://github.com/python-excel/xlwt/issues/22
若本文侵犯了以上的利益,请留言联系 |