diff options
-rw-r--r-- | HISTORY.md | 1 | ||||
-rw-r--r-- | src/tablib/formats/_xlsx.py | 2 | ||||
-rw-r--r-- | tests/files/ragged.xlsx | bin | 0 -> 4698 bytes | |||
-rwxr-xr-x | tests/test_tablib.py | 7 |
4 files changed, 10 insertions, 0 deletions
@@ -12,6 +12,7 @@ - Fixed minimal openpyxl dependency version to 2.6.0 (#457). - Dates from xls files are now read as Python datetime objects (#373). +- Allow import of "ragged" xlsx files (#465). ### Improvements diff --git a/src/tablib/formats/_xlsx.py b/src/tablib/formats/_xlsx.py index dffc192..e740373 100644 --- a/src/tablib/formats/_xlsx.py +++ b/src/tablib/formats/_xlsx.py @@ -92,6 +92,8 @@ class XLSXFormat: if (i == 0) and (headers): data.headers = row_vals else: + if i > 0 and len(row_vals) < data.width: + row_vals += [''] * (data.width - len(row_vals)) data.append(row_vals) dbook.add_sheet(data) diff --git a/tests/files/ragged.xlsx b/tests/files/ragged.xlsx Binary files differnew file mode 100644 index 0000000..339ec22 --- /dev/null +++ b/tests/files/ragged.xlsx diff --git a/tests/test_tablib.py b/tests/test_tablib.py index ca57d00..3efc87f 100755 --- a/tests/test_tablib.py +++ b/tests/test_tablib.py @@ -1015,6 +1015,13 @@ class XLSXTests(BaseTestCase): self.assertEqual(data.dict[0]['float'], 21.55) self.assertEqual(data.dict[0]['date/time'], date_time) + def test_xlsx_import_set_ragged(self): + """Import XLSX file when not all rows have the same length.""" + xlsx_source = Path(__file__).parent / 'files' / 'ragged.xlsx' + with open(str(xlsx_source), mode='rb') as fh: + book = tablib.Databook().load(fh, 'xlsx') + self.assertEqual(book.sheets()[0].pop(), (1.0, '')) + def test_xlsx_wrong_char(self): """Bad characters are not silently ignored. We let the exception bubble up.""" from openpyxl.utils.exceptions import IllegalCharacterError |