Skip to content

Commit 8ddf27f

Browse files
authored
fix: xlsx_errors column overwriting last data field in XLSX export (#2194)
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent c095796 commit 8ddf27f

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

scanpipe/pipes/output.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ def add_xlsx_worksheet(workbook, worksheet_name, rows, fields):
382382
worksheet.write_row(row=0, col=0, data=header, cell_format=cell_format)
383383

384384
errors_count = 0
385-
errors_col_index = len(fields) - 1 # rows and cols are zero-indexed
385+
errors_col_index = len(fields) # rows and cols are zero-indexed
386386

387387
for row_index, record in enumerate(rows, start=1):
388388
row_errors = []

scanpipe/tests/pipes/test_output.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,28 @@ def test_add_xlsx_worksheet_does_not_munge_long_strings_of_over_1024_lines(self)
839839
if r != x:
840840
self.assertEqual(r[-50:], x)
841841

842+
def test_add_xlsx_worksheet_writes_errors_to_dedicated_column(self):
843+
rows = [{"foo": "some value", "bar": "f" * 40000}]
844+
845+
test_dir = Path(tempfile.mkdtemp(prefix="scancode-io-test"))
846+
output_file = test_dir / "errors-column.xlsx"
847+
with xlsxwriter.Workbook(str(output_file)) as workbook:
848+
output.add_xlsx_worksheet(
849+
workbook=workbook,
850+
worksheet_name="packages",
851+
rows=rows,
852+
fields=["foo", "bar"],
853+
)
854+
855+
workbook = openpyxl.load_workbook(output_file, read_only=True, data_only=True)
856+
worksheet = workbook["packages"]
857+
header_row, data_row = list(worksheet.iter_rows(values_only=True))
858+
859+
self.assertEqual(("foo", "bar", "xlsx_errors"), header_row)
860+
self.assertEqual("some value", data_row[0])
861+
self.assertEqual("f" * 32767, data_row[1])
862+
self.assertIn("has been truncated", data_row[2])
863+
842864
def test__adapt_value_for_xlsx_does_adapt(self):
843865
result, error = output._adapt_value_for_xlsx(
844866
fieldname="foo",

0 commit comments

Comments
 (0)