From 15815d5f0656e9d52ebfd20497763e299fd99e44 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 6 Nov 2024 18:29:16 +0900 Subject: [PATCH] Generate Excel stage-2 --- SumasenLibs/excel_lib/sumaexcel/sumaexcel.py | 29 +++++++++++++++--- .../testdata/certificate_template.xlsx | Bin 10461 -> 10832 bytes 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/SumasenLibs/excel_lib/sumaexcel/sumaexcel.py b/SumasenLibs/excel_lib/sumaexcel/sumaexcel.py index c12154f..c977537 100644 --- a/SumasenLibs/excel_lib/sumaexcel/sumaexcel.py +++ b/SumasenLibs/excel_lib/sumaexcel/sumaexcel.py @@ -416,11 +416,22 @@ class SumasenExcel: print(f"min_col, min_row, max_col, max_row = {target_min_col}, {target_min_row}, {target_max_col}, {target_max_row}") - # 新しいシートを作成(必要な場合) - if 'Sheet' not in self.workbook.sheetnames: - self.current_sheet = self.workbook.create_sheet('Sheet') + # Get template sheet name from ini file + section_config = self.conf.get_section(self.section_list[0]) # 現在の処理中のセクション + template_sheet_name = section_config.get("template_sheet") + + if not template_sheet_name: + raise ValueError("Template sheet name not found in configuration") + + # Create new sheet with template name if it doesn't exist + if template_sheet_name not in self.workbook.sheetnames: + self.current_sheet = self.workbook.create_sheet(template_sheet_name) else: - self.current_sheet = self.workbook['Sheet'] + self.current_sheet = self.workbook[template_sheet_name] + + # Remove default sheet if it exists + if 'Sheet' in self.workbook.sheetnames: + del self.workbook['Sheet'] # Copy column widths for col in range(orig_min_col, orig_max_col + 1): @@ -429,6 +440,16 @@ class SumasenExcel: self.current_sheet.column_dimensions[col_letter].width = \ self.template_sheet.column_dimensions[col_letter].width + # Copy row heights + for row in range(orig_min_row, orig_max_row + 1): + target_row = row - orig_min_row + target_min_row + if row in self.template_sheet.row_dimensions: + source_height = self.template_sheet.row_dimensions[row].height + if source_height is not None: + if target_row not in self.current_sheet.row_dimensions: + self.current_sheet.row_dimensions[target_row] = openpyxl.worksheet.dimensions.RowDimension(target_row) + self.current_sheet.row_dimensions[target_row].height = source_height + # Copy merged cells for merged_range in self.template_sheet.merged_cells: min_col, min_row, max_col, max_row = range_boundaries(str(merged_range)) diff --git a/SumasenLibs/excel_lib/testdata/certificate_template.xlsx b/SumasenLibs/excel_lib/testdata/certificate_template.xlsx index 19b4c60491d1ad90e9f3149867ff2938a49b5531..2baa17da1a65caeae164ef8e5de4656b60089e79 100644 GIT binary patch delta 4838 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 HC*%JBAHOsy delta 4483 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 D_7z+*