Exemplo n.º 1
0
 def do_numfmt(self, elem):
     formatCode = unicode(elem.get('formatCode'))
     numFmtId = int(elem.get('numFmtId'))
     is_date = is_date_format_string(self.bk, formatCode)
     self.fmt_is_date[numFmtId] = is_date
     fmt_obj = Format(numFmtId, is_date + 2, formatCode)
     self.bk.format_map[numFmtId] = fmt_obj
     if self.verbosity >= 3:
         self.dumpout('numFmtId=%d formatCode=%r is_date=%d', numFmtId, formatCode, is_date)
Exemplo n.º 2
0
 def do_numfmt(self, elem):
     formatCode = unicode(elem.get("formatCode"))
     numFmtId = int(elem.get("numFmtId"))
     is_date = is_date_format_string(self.bk, formatCode)
     self.fmt_is_date[numFmtId] = is_date
     fmt_obj = Format(numFmtId, is_date + 2, formatCode)
     self.bk.format_map[numFmtId] = fmt_obj
     if self.verbosity >= 3:
         self.dumpout("numFmtId=%d formatCode=%r is_date=%d", numFmtId, formatCode, is_date)
Exemplo n.º 3
0
    def __load(self):
        sheetDoc = self.workbook.domzip["xl/worksheets/sheet%d.xml" % self.id]
        sheetData = sheetDoc.find("{http://schemas.openxmlformats.org/spreadsheetml/2006/main}sheetData")
        # @type sheetData Element
        rows = {}
        columns = {}
        for rowNode in sheetData:
            rowNum = int(rowNode.get("r"))
            for columnNode in rowNode:
                colType = columnNode.get("t")
                cellId = columnNode.get("r")
                cellS = columnNode.get("s")
                colNum = cellId[:len(cellId)-len(str(rowNum))]
                formula = None
                data = ''
                try:
                    if columnNode.find('{http://schemas.openxmlformats.org/spreadsheetml/2006/main}v') is not None:
                        if colType == "s":
                            stringIndex = columnNode[0].text
                            data = self.workbook.sharedStrings[int(stringIndex)]
                        #Built in date-formatted fields
                        elif cellS and int(self.workbook.cellStyles[int(cellS)].get('numFmtId')) in range(14, 22+1):
                            data = xldate_as_tuple(
                                float(columnNode[0].text),
                                datemode=0)
                        elif cellS and (self.workbook.cellStyles[int(cellS)].get('numFmtId') in self.workbook.numFmts) \
                            and is_date_format_string(self.workbook.numFmts[self.workbook.cellStyles[int(cellS)].get('numFmtId')]):
                            data = xldate_as_tuple(
                                float(columnNode[0].text),
                                datemode=0)
                        elif len(columnNode)>0 and columnNode[0] is not None:
                            data = columnNode.find("{http://schemas.openxmlformats.org/spreadsheetml/2006/main}v").text

                    if columnNode.find("{http://schemas.openxmlformats.org/spreadsheetml/2006/main}f") is not None:
                        formula = columnNode.find("{http://schemas.openxmlformats.org/spreadsheetml/2006/main}f").text
                except Exception:
                    raise #pass
                if not rowNum in rows:
                    rows[rowNum] = []
                if not colNum in columns:
                    columns[colNum] = []
                cell = Cell(rowNum, colNum, data, formula=formula)
                rows[rowNum].append(cell)
                columns[colNum].append(cell)
                self.__cells[cellId] = cell
        self.__rows = rows
        self.__cols = columns
        self.loaded=True
Exemplo n.º 4
0
    def rowsIter(self):
        sheetDoc = self.workbook.domzip["xl/worksheets/sheet%d.xml" % self.id]
        sheetData = sheetDoc.find(
            "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}sheetData"
        )
        # @type sheetData Element
        for rowNode in sheetData:
            rowNum = int(rowNode.get("r"))
            rowCells = []
            for columnNode in rowNode:
                colType = columnNode.get("t")
                cellId = columnNode.get("r")
                cellS = columnNode.get("s")
                colNum = cellId[:len(cellId) - len(str(rowNum))]
                formula = None
                data = ''
                try:
                    if len(
                            columnNode
                    ) > 0 and columnNode[0] is not None and columnNode.find(
                            '{http://schemas.openxmlformats.org/spreadsheetml/2006/main}v'
                    ) is not None:
                        if colType == "s":
                            stringIndex = columnNode[0].text
                            data = self.workbook.sharedStrings[int(
                                stringIndex)]
                        #Built in date-formatted fields
                        elif cellS and re.match("^[\d\.]+$",
                                                columnNode[0].text):
                            if int(self.workbook.cellStyles[int(cellS)].get(
                                    'numFmtId')) in range(14, 22 + 1):
                                data = xldate_as_tuple(float(
                                    columnNode[0].text),
                                                       datemode=0)
                            elif (self.workbook.cellStyles[int(cellS)].get('numFmtId') in self.workbook.numFmts) \
                                and is_date_format_string(self.workbook.numFmts[self.workbook.cellStyles[int(cellS)].get('numFmtId')]):
                                data = xldate_as_tuple(float(
                                    columnNode[0].text),
                                                       datemode=0)
                            else:
                                data = columnNode.find(
                                    "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}v"
                                ).text
                        else:
                            data = columnNode.find(
                                "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}v"
                            ).text
                    elif columnNode.find(
                            "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}is"
                    ) is not None:
                        if colType == "inlineStr":
                            data = columnNode[0][0].text

                    if columnNode.find(
                            "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}f"
                    ) is not None:
                        formula = columnNode.find(
                            "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}f"
                        ).text

                except Exception:
                    raise  #pass
                cell = Cell(rowNum, colNum, data, formula=formula)
                rowCells.append(cell)
            yield rowNum, rowCells