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?
Javier, Ihre „bearbeiten“ sollte eine „Antwort“ statt sein :) Sie dürfen Ihre eigene Frage hier auf Stackoverflow beantworten! –
Ich wusste es nicht! Danke –
Keine Sorgen! Sie können Ihre Antwort auch als Akzeptiert markieren. Willkommen bei SO. –