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