Exemple #1
0
    def get_cells(self, min_row, min_col, max_row, max_col):
        p = iterparse(self.xml_source)

        for _event, element in p:

            if element.tag == '{%s}c' % SHEET_MAIN_NS:
                coord = element.get('r')
                column_str, row = RE_COORDINATE.match(coord).groups()

                row = int(row)
                column = column_index_from_string(column_str)

                if min_col <= column <= max_col and min_row <= row <= max_row:
                    data_type = element.get('t', 'n')
                    style_id = element.get('s')
                    formula = element.findtext('{%s}f' % SHEET_MAIN_NS)
                    value = element.findtext('{%s}v' % SHEET_MAIN_NS)
                    if formula is not None and not self.parent.data_only:
                        data_type = Cell.TYPE_FORMULA
                        value = "=" + formula
                    if not (value or formula or style_id):
                        # this cell is pointless and should not have been
                        # written in the first place
                        continue
                    yield RawCell(row, column_str, coord, value, data_type,
                                  style_id, None)
            # sub-elements of cells should be skipped
            if (element.tag == '{%s}v' % SHEET_MAIN_NS
                    or element.tag == '{%s}f' % SHEET_MAIN_NS):
                continue
            element.clear()
    def get_cells(self, min_row, min_col, max_row, max_col):
        p = iterparse(self.xml_source)

        for _event, element in p:

            if element.tag == '{%s}c' % SHEET_MAIN_NS:
                coord = element.get('r')
                column_str, row = RE_COORDINATE.match(coord).groups()

                row = int(row)
                column = column_index_from_string(column_str)

                if min_col <= column <= max_col and min_row <= row <= max_row:
                    data_type = element.get('t', 'n')
                    style_id = element.get('s')
                    formula = element.findtext('{%s}f' % SHEET_MAIN_NS)
                    value = element.findtext('{%s}v' % SHEET_MAIN_NS)
                    if formula is not None and not self.parent.data_only:
                        data_type = Cell.TYPE_FORMULA
                        value = "=" + formula
                    if not (value or formula or style_id):
                        # this cell is pointless and should not have been
                        # written in the first place
                        continue
                    yield RawCell(row, column_str, coord, value, data_type, style_id, None)
            # sub-elements of cells should be skipped
            if (element.tag == '{%s}v' % SHEET_MAIN_NS
                or element.tag == '{%s}f' % SHEET_MAIN_NS):
                continue
            element.clear()
Exemple #3
0
def read_dimension(xml_source):
    min_row = min_col =  max_row = max_col = None
    source = _get_xml_iter(xml_source)
    it = iterparse(source)
    for event, el in it:
        if el.tag == '{%s}dimension' % SHEET_MAIN_NS:
            dim = el.get("ref")
            if ':' in dim:
                start, stop = dim.split(':')
            else:
                start = stop = dim
            min_col, min_row = coordinate_from_string(start)
            max_col, max_row = coordinate_from_string(stop)
            return min_col, min_row, max_col, max_row

        if el.tag == '{%s}row' % SHEET_MAIN_NS:
            row = el.get("r")
            if min_row is None:
                min_row = int(row)
            span = el.get("spans")
            if ":" in span:
                start, stop = span.split(":")
                if min_col is None:
                    min_col = int(start)
                    max_col = int(stop)
                else:
                    min_col = min(min_col, int(start))
                    max_col = max(max_col, int(stop))
    max_row = int(row)
    warn("Unsized worksheet")
    return get_column_letter(min_col), min_row, get_column_letter(max_col),  max_row
def read_dimension(xml_source):
    min_row = min_col =  max_row = max_col = None
    source = _get_xml_iter(xml_source)
    it = iterparse(source)
    for event, el in it:
        if el.tag == '{%s}dimension' % SHEET_MAIN_NS:
            dim = el.get("ref")
            if ':' in dim:
                start, stop = dim.split(':')
            else:
                start = stop = dim
            min_col, min_row = coordinate_from_string(start)
            max_col, max_row = coordinate_from_string(stop)
            return min_col, min_row, max_col, max_row

        elif el.tag == '{%s}row' % SHEET_MAIN_NS:
            row = el.get("r")
            if min_row is None:
                min_row = int(row)
            span = el.get("spans", "")
            if ":" in span:
                start, stop = span.split(":")
                if min_col is None:
                    min_col = int(start)
                    max_col = int(stop)
                else:
                    min_col = min(min_col, int(start))
                    max_col = max(max_col, int(stop))

        elif el.tag == '{%s}c' % SHEET_MAIN_NS:
            coord = el.get('r')
            column_str, row = coordinate_from_string(coord)
            column = column_index_from_string(column_str)
            if min_col is None:
                min_col = column
            else:
                min_col = min(column, min_col)
            if max_col is None:
                max_col = column
            else:
                max_col = max(column, max_col)
        el.clear()
    max_row = int(row)
    warn("Unsized worksheet")
    return get_column_letter(min_col), min_row, get_column_letter(max_col),  max_row
def read_dimension(xml_source):
    min_row = min_col = max_row = max_col = None
    source = _get_xml_iter(xml_source)
    it = iterparse(source)
    for event, el in it:
        if el.tag == "{%s}dimension" % SHEET_MAIN_NS:
            dim = el.get("ref")
            if ":" in dim:
                start, stop = dim.split(":")
            else:
                start = stop = dim
            min_col, min_row = coordinate_from_string(start)
            max_col, max_row = coordinate_from_string(stop)
            return min_col, min_row, max_col, max_row

        elif el.tag == "{%s}row" % SHEET_MAIN_NS:
            row = el.get("r")
            if min_row is None:
                min_row = int(row)
            span = el.get("spans", "")
            if ":" in span:
                start, stop = span.split(":")
                if min_col is None:
                    min_col = int(start)
                    max_col = int(stop)
                else:
                    min_col = min(min_col, int(start))
                    max_col = max(max_col, int(stop))

        elif el.tag == "{%s}c" % SHEET_MAIN_NS:
            coord = el.get("r")
            column_str, row = coordinate_from_string(coord)
            column = column_index_from_string(column_str)
            if min_col is None:
                min_col = column
            else:
                min_col = min(column, min_col)
            if max_col is None:
                max_col = column
            else:
                max_col = max(column, max_col)
        el.clear()
    max_row = int(row)
    warn("Unsized worksheet")
    return get_column_letter(min_col), min_row, get_column_letter(max_col), max_row
    def parse(self):
        stream = _get_xml_iter(self.source)
        it = iterparse(stream)

        dispatcher = {
            '{%s}c' % SHEET_MAIN_NS: self.parse_cell,
            '{%s}mergeCells' % SHEET_MAIN_NS: self.parse_merge,
            '{%s}cols' % SHEET_MAIN_NS: self.parse_column_dimensions,
            '{%s}sheetData' % SHEET_MAIN_NS: self.parse_row_dimensions,
            '{%s}printOptions' % SHEET_MAIN_NS: self.parse_print_options,
            '{%s}pageMargins' % SHEET_MAIN_NS: self.parse_margins,
            '{%s}pageSetup' % SHEET_MAIN_NS: self.parse_page_setup,
            '{%s}headerFooter' % SHEET_MAIN_NS: self.parse_header_footer,
            '{%s}conditionalFormatting' % SHEET_MAIN_NS: self.parser_conditional_formatting
                      }
        for event, element in it:
            tag_name = element.tag
            if tag_name in dispatcher:
                dispatcher[tag_name](element)
                element.clear()
    def parse(self):
        stream = _get_xml_iter(self.source)
        it = iterparse(stream)

        dispatcher = {
            "{%s}c" % SHEET_MAIN_NS: self.parse_cell,
            "{%s}mergeCells" % SHEET_MAIN_NS: self.parse_merge,
            "{%s}cols" % SHEET_MAIN_NS: self.parse_column_dimensions,
            "{%s}sheetData" % SHEET_MAIN_NS: self.parse_row_dimensions,
            "{%s}printOptions" % SHEET_MAIN_NS: self.parse_print_options,
            "{%s}pageMargins" % SHEET_MAIN_NS: self.parse_margins,
            "{%s}pageSetup" % SHEET_MAIN_NS: self.parse_page_setup,
            "{%s}headerFooter" % SHEET_MAIN_NS: self.parse_header_footer,
            "{%s}conditionalFormatting" % SHEET_MAIN_NS: self.parser_conditional_formatting,
        }
        for event, element in it:
            tag_name = element.tag
            if tag_name in dispatcher:
                dispatcher[tag_name](element)
                element.clear()