Seite 1 von 1

Umlaute und Excel

Verfasst: Donnerstag 18. September 2008, 12:50
von rabit
Hallo,

mein Problem ist das ich Umlaute in Excel Tabellen nicht lesen kann.

Grundlage ist ein Beispiel hier vom Forum. Es werden Werte in eine Excel Tabelle (test.xls) geschrieben. Erweitert nur um das neuerliche Lesen aus der gerade beschriebenen Tabelle.
Ohne Umlaute kein Problem, mit Umlauten (Zum Beispiel Mästermann satt Mustermann) kommt die übliche "UnicodeEncodeError, ... not in range (128)" Fehlermeldung

Was kommt denn da von Excel zurück? Wie soll ich das decodieren.
Danke für jede Hilfe.

Grüße
rabit

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
Werte in eine Excel-Arbeitsmappe schreiben

Requirements:  Python: http://www.python.org/
               pywin32: http://sourceforge.net/projects/pywin32/
"""
 
import datetime
import win32com.client
import sys


fieldnames = (u"Vorname", u"Nachname", u"Geburtstag")
values = (
    (u"Max", u"Mustermann", datetime.date(1974, 8, 18)),
    (u"Leo", u"Mustermann", datetime.date(1974, 8, 19)),
    (u"Maria", u"Musterfrau", datetime.date(1974, 8, 20)),
)

# Werte vermehren -- zum Testen
values = 10 * values

# Verbindung zu Excel aufnehmen
app = win32com.client.dynamic.Dispatch("Excel.Application")

# Neue Arbeitsmappe
workbook = app.Workbooks.Add()

# Neues Arbeitsblatt
worksheet = workbook.Worksheets.Add()
worksheet.Name = "Adressen"

# Hinweis: Cells-Syntax: Cells(row_id, col_id)

# Feldnamen schreiben (und fett formatieren)
for index, fieldname in enumerate(fieldnames):
    worksheet.Cells(1, (index + 1)).Value = fieldname
    worksheet.Cells(1, (index + 1)).Font.Bold = True

# Feldwerte schreiben
for index, (vorname, nachname, geburtstag) in enumerate(values):
    worksheet.Cells(index + 2, 1).Value = vorname
    worksheet.Cells(index + 2, 2).Value = nachname
    worksheet.Cells(index + 2, 3).Value = geburtstag

# Bereichsnamen vergeben
cells = worksheet.Range("A1", worksheet.Cells(len(values) + 1, len(fieldnames)))
cells.Name = "Adressen"

# Workbook speichern und schließen
workbook.SaveAs(u"test.xls")

#stdout_encoding = sys.getfilesystemencoding()
stdout_encoding = sys.stdout.encoding or sys.getfilesystemencoding()
#print stdout_encoding
#print str(values).decode(stdout_encoding)

#Wieder einlesen:
cells = worksheet.Range("A1", "B7")
#print cells.Rows.count
#print cells.Columns.count
for row in range(1,cells.Rows.count + 1):
    for cell in range(1,cells.Columns.count + 1):
        cellcontent = str(cells(row,cell)).decode("iso-8859-1")
        print "Zeile / Spalte: ", row, cell, "= ", cellcontent.encode(stdout_encoding)


workbook.Close()

#Excel anzeigen
#app.visible = True

#Excel schließen
app.Quit()

# Objekte in der richtigen Reihenfolge löschen
del worksheet
del workbook
del app