From 99c7bcc8d1b3852ea09398e4b56e025c1f5e1701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Mon, 26 Feb 2024 21:27:17 +0100 Subject: [PATCH] wip --- .../table_json_conversion/fill_xlsx.py | 24 ++++++++++++------- .../table_json_conversion/test_fill_xlsx.py | 5 +++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py index b9e1a93f..a3f336f2 100644 --- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py +++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py @@ -24,14 +24,15 @@ from openpyxl import load_workbook from .table_generator import ColumnType, RowType -def _fill_leaves(json_doc: dict, workbook): +def _fill_leaves(json_doc: dict, workbook, path: list, cm: dict): for key, value in json_doc: if not isinstance(value, list): value = [value] for el in value: if isinstance(el, dict): - _fill_leaves(el, workbook) - wb.cell(1,2, el) + _fill_leaves(el, workbook, path+[key]) + sn, coli = cm[".".join(path)] + wb[sn].columns[coli].cell(1,2, el) #TODO what row ????? def _get_row_type_column(worksheet): for col in worksheet.columns: @@ -44,7 +45,6 @@ def _get_path_rows(worksheet): rows = [] rt_col = _get_row_type_column(worksheet) for cell in list(worksheet.columns)[rt_col-1]: - print(cell.value) if cell.value == RowType.PATH.name: rows.append(cell.row) return rows @@ -52,11 +52,19 @@ def _get_path_rows(worksheet): def _generate_path_col_mapping(workbook): - rt_col = _get_row_type_column(workbook) - - for col in workbook.columns: - pass + col_mapping = {} + for sn in workbook.sheetnames: + worksheet = workbook[sn] + path_rows = _get_path_rows(worksheet) + rt_col = _get_row_type_column(worksheet) + for ii, col in enumerate(worksheet.columns): + if ii+1 == rt_col: + continue + path = [col[el-1].value for el in path_rows if col[el-1].value is not None] + col_mapping[".".join(path)] = (sn, ii) + print(col_mapping) + return col_mapping def fill_template(template_path: str, json_path: str, result_path: str)-> None: """ diff --git a/unittests/table_json_conversion/test_fill_xlsx.py b/unittests/table_json_conversion/test_fill_xlsx.py index 7f9936c1..1df89ea0 100644 --- a/unittests/table_json_conversion/test_fill_xlsx.py +++ b/unittests/table_json_conversion/test_fill_xlsx.py @@ -23,7 +23,8 @@ import os import tempfile from caosadvancedtools.table_json_conversion.fill_xlsx import ( - _get_path_rows, _get_row_type_column, fill_template) + _generate_path_col_mapping, _get_path_rows, _get_row_type_column, + fill_template) from openpyxl import load_workbook @@ -39,6 +40,8 @@ def test_detect(): example = load_workbook(rfp("example_template.xlsx")) assert 1 == _get_row_type_column(example['Person']) assert [2,3,4] == _get_path_rows(example['Person']) + cm = _generate_path_col_mapping(example) + assert cm['Person.Organisation.Country'] == ('Person', 5) def test_fill_xlsx(): path = os.path.join(tempfile.mkdtemp(), 'test.xlsx') -- GitLab