From 6c2c1057d2780c079218fe988d1d5243eefec159 Mon Sep 17 00:00:00 2001 From: Konstantin Lopuhin Date: Wed, 18 Jun 2014 12:43:04 +0400 Subject: [PATCH] fix parsing of bad dimensions --- xlrd/xlsx.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/xlrd/xlsx.py b/xlrd/xlsx.py index 53fbb89..763df0c 100644 --- a/xlrd/xlsx.py +++ b/xlrd/xlsx.py @@ -73,7 +73,8 @@ def augment_keys(adict, uri): _UPPERCASE_1_REL_INDEX[_x] = 0 del _x -def cell_name_to_rowx_colx(cell_name, letter_value=_UPPERCASE_1_REL_INDEX): +def cell_name_to_rowx_colx(cell_name, letter_value=_UPPERCASE_1_REL_INDEX, + allow_no_col=False): # Extract column index from cell name # A => 0, Z =>25, AA => 26, XFD => 16383 colx = 0 @@ -85,9 +86,18 @@ def cell_name_to_rowx_colx(cell_name, letter_value=_UPPERCASE_1_REL_INDEX): if lv: colx = colx * 26 + lv else: # start of row number; can't be '0' - colx = colx - 1 - assert 0 <= colx < X12_MAX_COLS - break + if charx == 0: + # there was no col marker + if allow_no_col: + colx = None + break + else: + raise Exception( + 'Missing col in cell name %r', cell_name) + else: + colx = colx - 1 + assert 0 <= colx < X12_MAX_COLS + break except KeyError: raise Exception('Unexpected character %r in cell name %r' % (c, cell_name)) rowx = int(cell_name[charx:]) - 1 @@ -562,9 +572,11 @@ def do_dimension(self, elem): if ref: # print >> self.logfile, "dimension: ref=%r" % ref last_cell_ref = ref.split(':')[-1] # example: "Z99" - rowx, colx = cell_name_to_rowx_colx(last_cell_ref) + rowx, colx = cell_name_to_rowx_colx( + last_cell_ref, allow_no_col=True) self.sheet._dimnrows = rowx + 1 - self.sheet._dimncols = colx + 1 + if colx is not None: + self.sheet._dimncols = colx + 1 def do_merge_cell(self, elem): # The ref attribute should be a cell range like "B1:D5".