Seite 1 von 1

Umlautproblem bei Excelexport (xlwt)

Verfasst: Mittwoch 20. Juli 2011, 10:36
von andi24
Hallo zusammen,

ich möchte Daten aus einer ISO-8859-1 (latin1) Datenbank über ein Python-Script in eine xls-Datei schreiben. Das klappt auch solange bis der Wert einen Umlaut enthält.

Hier der wesentliche Teil des Codes:

Code: Alles auswählen

#/usr/bin/python
# -*- coding: utf-8 -*-

def main():

	# DB Verbindung herstellen und Wert aus DB holen	
	conn = initDBConnection()
	curs = createCursor(conn)
	sql="""select name from tabelle where id=1"""
	curs.execute(sql)	
	row = curs.fetchone()

	# Excel-Datei öffnen
	dateiname = "test.xls"
	book = Workbook(encoding='utf-8')
	sheet1 = book.add_sheet('MySheet')

	# Wert in Excel-Datei schreiben
	sheet1.row(1).write(0, rows[0])   # Inhalt von rows[0] ist Müller
		
	# Excel-Datei speichern und DB-Verbindung schließen
	book.save(dateiname)
	book.save(TemporaryFile())
	closeConnection(conn)
Ich bekomme dabei jedoch die Fehlermeldung:

Code: Alles auswählen

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 10-15: unsupported Unicode code range
in der Zeile "sheet1.row(1).write(0, rows[0])". Das Pythonscript selbst (also das Textfile) ist als UTF-8 abgespeichert.

Kann mir da jemand weiterhelfen? Bin da langsam echt ratlos...

Vielen Dank für jeden Tip!

Re: Umlautproblem bei Excelexport (xlwt)

Verfasst: Mittwoch 20. Juli 2011, 11:26
von deets
Da du uns nicht verraetst, was du fuer eine Datenbank verwendest, kann ich jetzt nur raten - aber ich vermute mal, dass die Datenbank die Daten eben nicht als unicode-Objekte zurueckgibt, sondern als byte-strings. Die moegen zwar in latin1 encodiert sein, aber das weiss ja keiner.

Die sauberste Loesung waere demnach, die Datenbank-Verbindung so zu oeffnen, dass schon gleich die Datenbank (bzw der Adapter) unicode-Objekte zurueckliefert. Wie das genau geht, haengt von der DB ab.

Re: Umlautproblem bei Excelexport (xlwt)

Verfasst: Mittwoch 20. Juli 2011, 11:29
von BlackJack
@andi24: Das gibt einen `NameError` in der Zeile weil `rows` nirgends definiert wird. Ansonsten müsstest Du schon etwas genauer bestimmen was der Inhalt von ``rows[0]`` ist. Einfach nur Müller reicht nicht. Das ist abstrakt gesehen was da drin sein sollte, aber ganz konkret welcher Typ ist das denn? `str`? `unicode`? Wenn `str`, dann in welcher Kodierung? ISO-8859-1? Falls ja, dann sollte es nicht weiter verwundern dass der 'M\xfcller' nicht als UTF-8 dekodiert werden kann.

Re: Umlautproblem bei Excelexport (xlwt)

Verfasst: Mittwoch 20. Juli 2011, 14:51
von andi24
Vielen Dank für euere schnellen Antworten!

Mit

Code: Alles auswählen

sheet1.row(1).write(0, rows[0].decode('iso-8859-1').encode('utf-8'))
hat es geklappt!