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 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()