我正在用Python 3.6编写一个小程序,它读取一个excel文件,然后修改单元格的格式。我想在同一个单元格中使用多种格式,所以我将xlwtwrite_rich_text一起使用:

import xlrd
import xlwt
from xlutils.copy import copy

col = 0
row = 0

rb = xlrd.open_workbook('test.xls', formatting_info=True)

r_sheet = rb.sheet_by_index(0)
text_cell = r_sheet.cell_value(row, col)

book = copy(rb)
first_sheet = book.get_sheet(0)

font1 = xlwt.easyfont('struck_out true, color_index red')
font2 = xlwt.easyfont('color_index green')

seg1 = (text_cell[0:10], font1)
seg2 = (text_cell[10:], font2)


first_sheet.write_rich_text(row, col, [seg1, seg2])

book.save('test.xls')

在写入excel文件之前,一切正常,但在保存工作簿时出现错误TypeError: must be str, not bytes
完全错误:
File "test.py", line 91, in <module>
book.save('test.xls')

File "C:\Users\...\AppData\Local\Continuum\Anaconda2\envs\py36\lib\site-packages\xlwt\Workbook.py", line 710, in save
doc.save(filename_or_stream, self.get_biff_data())

File "C:\Users\...\AppData\Local\Continuum\Anaconda2\envs\py36\lib\site-packages\xlwt\Workbook.py", line 674, in get_biff_data
shared_str_table   = self.__sst_rec()

File "C:\Users\...\AppData\Local\Continuum\Anaconda2\envs\py36\lib\site-packages\xlwt\Workbook.py", line 636, in __sst_rec
return self.__sst.get_biff_record()

File "C:\Users\...\AppData\Local\Continuum\Anaconda2\envs\py36\lib\site-packages\xlwt\BIFFRecords.py", line 79, in get_biff_record
self._add_rt_to_sst(s)

File "C:\Users\...\AppData\Local\Continuum\Anaconda2\envs\py36\lib\site-packages\xlwt\BIFFRecords.py", line 108, in _add_rt_to_sst
rt_str, rt_fr = upack2rt(rt, self.encoding)

File "C:\Users\...\AppData\Local\Continuum\Anaconda2\envs\py36\lib\site-packages\xlwt\UnicodeUtils.py", line 86, in upack2rt
fr += pack('<HH', offset, fontx)

TypeError: must be str, not bytes

我一直在寻找解决这个问题的方法,但那里的答案似乎并不能解决我的问题:
xlwt book.save TypeError: must be str, not bytes
Python code, not able to write into xls
然后我发现这个问题可能与在Python 3和Python 2中处理字符串的方式有关,并且我可能在导致错误的地方获取字节字符串。
我看了一下text_cell的类型,发现它是str,我试着在seg1seg2中操作字体,但仍然没有成功。
最后,我在Python2.7上运行了同样的脚本,它成功了!
坏消息是,我需要代码在Python 3中工作,因为运行该代码的服务器只有python3,不能更改。
有人知道是什么导致了这个问题吗?

最佳答案

显然,这是一个知道的问题,在xlwt上个月已修复!我更新了程序包,现在它工作起来很有魅力。
https://github.com/python-excel/xlwt/issues/89

关于python - Python 3-xlwt保存工作簿错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44677179/

10-10 19:25