2017-06-21 320 views
2

我正在Python 3.6中编写一个小程序,该程序读取一个excel文件,然后修改单元格的格式。我想在同一小区内的多种格式,所以我使用xlwtwrite_rich_textPython 3 - xlwt保存工作簿错误

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中的字符串处理方式有关,并且我可能会b e在某处导致错误的字节串。

我看了text_cell的类型,并且是str,我尝试了在seg1seg2中忽略的字体,但它仍然不起作用。 最后,我在Python 2.7上运行了这个相同的脚本,它工作正常!

坏消息是我需要在Python 3中工作的代码,因为只能运行Python 3的服务器不能更改。

任何人都有可能导致问题的线索?

+0

哈维尔,你的“编辑”应该是“答案”,而不是:)你被允许在这里回答你自己的问题在计算器上! –

+0

我不知道!谢谢 –

+0

不用担心!您也可以将您的答案标记为已接受。欢迎来到SO。 –

回答

相关问题