J'écris un petit programme en Python 3.6 qui lit un fichier Excel puis modifie le format d'une cellule. Je veux plusieurs formats dans la même cellule, donc je suis en utilisant xlwt
avec write_rich_text
:Python 3 - xlwt save Erreur de classeur
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')
Tout fonctionne bien au point d'écrire sur le fichier Excel, mais je reçois l'erreur TypeError: must be str, not bytes
lors de l'enregistrement du classeur.
erreur complète:
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
J'ai cherché une solution à ce problème, mais les réponses il ne semble pas résoudre mon problème:
xlwt book.save TypeError: must be str, not bytes
Python code, not able to write into xls
Ensuite, j'ai trouvé que ce problème pourrait être lié à la façon dont les chaînes sont traitées dans Python 3 vs Python 2 et que je pourrais b Obtenir une chaîne d'octets quelque part qui cause l'erreur.
J'ai regardé le type de text_cell
et est str
, j'ai essayé ommiting la police dans seg1
et seg2
mais il ne fonctionne toujours pas. Enfin, j'ai exécuté ce même script sur Python 2.7 et cela a fonctionné!
La mauvaise nouvelle est que j'ai besoin du code pour travailler en Python 3 puisque le serveur sur lequel il s'exécutera seulement a Python 3 et ne peut pas être changé.
Quelqu'un at-il une idée de ce qui pourrait causer le problème?
Javier, votre « modifier » devrait être une « réponse » à la place :) Vous êtes autorisé à répondre à votre propre question ici sur StackOverflow! –
Je ne savais pas! Merci –
Pas de soucis! Vous êtes également autorisé à marquer votre réponse comme acceptée. Bienvenue à SO. –