Tanja: Python: xml/xlsx parser

Beitrag lesen

Guten Morgen,

seit längerem nutze ich das xlsx2csv.py Script zum Konvertieren verschiedener Exports.

Leider haben einige "Datenlieferanten" neuerdings in ihrer xlsx Datei eine leere Zeile. Die Datei ist valide, aber eben mit dem "Bug", dass Zeile 1 leer ist und die Reihenbeschriftung in Zeile 2 zu finden ist.

An sich kein Problem, aber scheinbar sieht Python das anders:

...
self.colNum = cellId[:len(cellId)-len(self.rowNum)]
=> TypeError: object of type 'NoneType' has no len()

Habt ihr einen Tipp, wie sich das umgehen lässt?

Einiges habe ich bereits versucht, jedoch immer nur mit dem Ergebnis, dass zwar der Fehler nicht mehr angezeigt wird, aber die Inhalte der darunterliegenden Reihen nicht vollständig geladen werden :-(

    def handleStartElement(self, name, attrs):  
##self.colType!="NoneType" fuehrt dazu, dass auch darunterliegende Inhalte fehlen  
        if self.in_row and name == 'c' and self.colType!="NoneType":  
            self.colType = attrs.get("t")  
            self.s_attr = attrs.get("s")  
            cellId = attrs.get("r")  
##dasselbe passiert damit  
#            try:  
#               self.colNum = cellId[:len(cellId)-len(self.rowNum)]  
#            except (TypeError):  
#               self.colNum = self.colNum  
            self.colNum = cellId[:len(cellId)-len(self.rowNum)]  
            #self.formula = None  
            self.data = ""  
            self.in_cell = True  
        elif self.in_cell and name == 'v':  
            self.in_cell_value = True  
        elif self.in_sheet and name == 'row' and attrs.has_key('r'):  
            self.rowNum = attrs['r']  
            self.in_row = True  
            self.columns = {}  
            self.spans = None  
            if attrs.has_key('spans'):  
                self.spans = [int(i) for i in attrs['spans'].split(":")]  
        elif name == 'sheetData':  
            self.in_sheet = True  

Großes Dankeschön