diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py index 511c006df4938cd6210fffc06334b02f3fc422b4..88356ccc39a2bda9a1dfa24bdbee12bd5b000e2b 100644 --- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py +++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py @@ -32,6 +32,7 @@ from warnings import warn from jsonschema import FormatChecker, validate from jsonschema.exceptions import ValidationError from openpyxl import Workbook, load_workbook +from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE from openpyxl.worksheet.worksheet import Worksheet from .table_generator import ColumnType, RowType @@ -332,7 +333,8 @@ out: union[dict, None] if insert_row is None: insert_row = _next_row_index(sheet) - sheet.cell(row=insert_row+1, column=col_index+1, value=value) + sheet.cell(row=insert_row+1, column=col_index+1, + value=ILLEGAL_CHARACTERS_RE.sub("", value)) # Insert foreign keys if insert_row is not None and sheet is not None and _is_exploded_sheet(sheet): @@ -343,7 +345,8 @@ out: union[dict, None] raise for index, path in ((f.index, f.path) for f in foreigns.values()): value = context[path] - sheet.cell(row=insert_row+1, column=index+1, value=value) + sheet.cell(row=insert_row+1, column=index+1, + value=ILLEGAL_CHARACTERS_RE.sub("", value)) return None diff --git a/unittests/table_json_conversion/data/simple_data_ascii_chars.json b/unittests/table_json_conversion/data/simple_data_ascii_chars.json index 049b7203ce178885e436e2b2157cb70a6846fd74..b1d13ebee5d6e3949fa606a130e6f5819bfc4bc8 100644 --- a/unittests/table_json_conversion/data/simple_data_ascii_chars.json +++ b/unittests/table_json_conversion/data/simple_data_ascii_chars.json @@ -1,17 +1,17 @@ { "Training": { "date": "2023-01-01", - "url": "char: \u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009", + "url": "char: >\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009<", "subjects": [ - "\u000a\u000b\u000c\u000d\u000e\u000f", - "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017", - "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f", - "\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027", - "\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f" + ">\u000a\u000b\u000c\u000e\u000f<", + ">\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017<", + ">\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f<", + ">\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027<", + ">\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f<" ] }, "Person": { - "family_name": "Steve:", + "family_name": "Steve", "given_name": "Stevie", "Organisation": "IMF" } diff --git a/unittests/table_json_conversion/data/simple_data_ascii_chars.xlsx b/unittests/table_json_conversion/data/simple_data_ascii_chars.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bdf60b568bf51726a0a25e599bb6c7e70988d287 Binary files /dev/null and b/unittests/table_json_conversion/data/simple_data_ascii_chars.xlsx differ diff --git a/unittests/table_json_conversion/test_fill_xlsx.py b/unittests/table_json_conversion/test_fill_xlsx.py index 8609a6eb919a8af3cd95f0b0cdb347f62a8a6305..946336da721f7c9affd5c553ccbb38cb46217eef 100644 --- a/unittests/table_json_conversion/test_fill_xlsx.py +++ b/unittests/table_json_conversion/test_fill_xlsx.py @@ -134,10 +134,9 @@ def test_fill_xlsx(): template_file=rfp("data/indirect_template.xlsx"), known_good=rfp("data/indirect_data.xlsx"), schema=rfp("data/indirect_schema.json")) - fill_and_compare(json_file=rfp("data/simple_data_ascii_chars.json"), template_file=rfp("data/simple_template.xlsx"), - known_good=rfp("data/simple_data.xlsx"), + known_good=rfp("data/simple_data_ascii_chars.xlsx"), schema=rfp("data/simple_schema.json"))