Donnerstag, 9. Februar 2012

SAP Spreadsheet-Exporte parsen

… ist leider nicht so einfach.

SAP bietet die Möglichkeit, Reports zu exportieren. Zur Auswahl steht unter anderem auch ein „Spreadsheet“-Format, für welches die Endung .xls vorgeschlagen wird. Dabei handelt es sich aber nicht etwa um das Excel-Binärformat, welches heute durch OOXML abgelöst wurde, sondern um das ältere XLL-Format, was auch immer das genau sein soll. Betrachtet man die aus SAP generierte Datei in einem Text-Editor, ist offensichtlich, dass es sich hierbei nicht um ein Binär- sondern um ein Plaintext-Format mit Tabulator getrennten Spalten handelt.

Wenn diese Datei aber mit Python eingelesen wird und verarbeitet werden soll, ergeben sich Probleme. Die Zeichen sind auf der cygwin-Kommandozeile von einem Leerzeichen getrennt. Es handelt sich also nicht um eine ASCII-Ausgabe.

Ein Blick mit Notepad++ auf die Datei zeigt, dass die Encodierung der Datei UCS-2 Little Endian sein soll. Auf Stackoverflow ist erwähnt, dass diese Encodierung in Python wie UTF-16 behandelt werden kann, und zwar folgendermassen:

file = codecs.open(filenameInput,'Ur',encoding='utf-16be')

Leider führt das aber nicht zum Erfolg, was nachfolgende Fehlermeldung einem schmerzlich vor Augen führt:

Traceback (most recent call last):
  File "./<script>.py", line 140, in 
    data = file.read()
  File "C:\Python27\lib\codecs.py", line 671, in read
    return self.reader.read(size)
  File "C:\Python27\lib\codecs.py", line 477, in read
    newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf16' codec can't decode bytes in position 1082-1083: illegal encoding

Liked this post? Follow this blog to get more. 

Tags: , ,
Labels: Allgemein

Kommentar erfassen