Skip to content

Commit be0613d

Browse files
authored
Merge pull request #9 from mtskelton/dev
Potential fix for incorrect reading of data with empty cells when used with pyexcel
2 parents 80bd1e4 + 057cea8 commit be0613d

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

pyexcel_xlsxr/messy_xlsx.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,14 @@ def __repr__(self):
182182
return str(self.value)
183183

184184

185+
def column_to_number(column):
186+
column = re.sub("[^A-Z]", "", column)
187+
cl = len(column) - 1
188+
return sum(
189+
[(ord(c.upper()) - 64) + (26 * (cl - i)) for i, c in enumerate(column)]
190+
)
191+
192+
185193
def parse_row(row_xml_string, book):
186194
if b"x14ac" in row_xml_string:
187195
row_xml_string = row_xml_string.replace(
@@ -191,11 +199,20 @@ def parse_row(row_xml_string, book):
191199
cells = []
192200
cell = Cell()
193201

202+
last_column_number = None
194203
for action, element in etree.iterparse(partial):
195-
196204
if element.tag in ["v", "t"]:
197205
cell.value = element.text
198206
elif element.tag in ["c"]:
207+
ref = element.attrib.get("r")
208+
if ref:
209+
column_number = column_to_number(ref)
210+
if last_column_number is not None:
211+
padding = column_number - last_column_number - 1
212+
if padding > 0:
213+
cells += [Cell() for _ in range(padding)]
214+
last_column_number = column_number
215+
199216
local_type = element.attrib.get("t")
200217
cell.column_type = local_type
201218
style_int = element.attrib.get("s")

0 commit comments

Comments
 (0)