'The source worksheet file may have columns or rows missing.
Missing cells will be created.'

def get_squared_range(self, min_col, min_row, max_col, max_row):

    if (max_col is not None):
        empty_row = tuple((EMPTY_CELL for column in range(min_col, (max_col + 1))))
    else:
        empty_row = []
    row_counter = min_row
    p = iterparse(self.xml_source, tag=[ROW_TAG], remove_blank_text=True)
    for (_event, element) in p:
        if (element.tag == ROW_TAG):
            row_id = int(element.get('r'))
            if ((max_row is not None) and (row_id > max_row)):
                break
            for row_counter in range(row_counter, row_id):
                row_counter += 1
                (yield empty_row)
            if (min_row <= row_id):
                (yield tuple(self._get_row(element, min_col, max_col)))
                row_counter += 1
        if (element.tag in CELL_TAGS):
            continue
        element.clear()
