2017-06-21 5 views
2

Ich schreibe ein kleines Programm in Python 3.6, das eine Excel-Datei liest und dann das Format einer Zelle ändert. Ich mag mehrere Formate innerhalb der gleichen Zelle so ich xlwt mit write_rich_text bin mit:Python 3 - xlwt save Arbeitsbuchfehler

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') 

Alles funktioniert bis zu dem Punkt des Schreibens auf die Excel-Datei in Ordnung, aber dann bekomme ich die Fehler TypeError: must be str, not bytes, wenn die Arbeitsmappe zu speichern.

Voll Fehler:

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 

Ich habe eine Lösung für dieses Problem gesucht, aber die Antworten dort scheinen nicht mein Problem zu lösen:

xlwt book.save TypeError: must be str, not bytes

Python code, not able to write into xls

Dann habe ich festgestellt, dass dieses Problem mit der Art in Verbindung gebracht werden kann, wie Zeichenfolgen in Python 3 gegen Python 2 gehandhabt werden, und das könnte ich b e Ermitteln einer Byte-Zeichenfolge, die den Fehler verursacht.

ich auf die Art der text_cell sah und ist str habe ich versucht, die Schrift in seg1 und seg2 ommiting aber es funktioniert immer noch nicht. Schließlich habe ich das gleiche Skript auf Python 2.7 ausgeführt und es hat funktioniert!

Die schlechte Nachricht ist, dass ich den Code in Python 3 arbeiten muss, da der Server, auf dem dies ausgeführt werden soll, nur Python 3 hat und nicht geändert werden kann.

Jeder hat eine Ahnung, was das Problem verursachen könnte?

+0

Javier, Ihre „bearbeiten“ sollte eine „Antwort“ statt sein :) Sie dürfen Ihre eigene Frage hier auf Stackoverflow beantworten! –

+0

Ich wusste es nicht! Danke –

+0

Keine Sorgen! Sie können Ihre Antwort auch als Akzeptiert markieren. Willkommen bei SO. –

Antwort