From 8ddab219e1df5d81ab52aa8d09828b7788eab369 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Thu, 20 Feb 2025 15:52:46 +0100 Subject: [PATCH] =?UTF-8?q?Fix:=20export=20excel=20avec=20caract=C3=A8res?= =?UTF-8?q?=20invalides?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scodoc/sco_excel.py | 15 +++++++++++++-- sco_version.py | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/scodoc/sco_excel.py b/app/scodoc/sco_excel.py index a0c25c158..0b0497529 100644 --- a/app/scodoc/sco_excel.py +++ b/app/scodoc/sco_excel.py @@ -40,7 +40,9 @@ from openpyxl.styles.numbers import FORMAT_NUMBER_00, FORMAT_GENERAL, FORMAT_DAT from openpyxl.comments import Comment from openpyxl import Workbook, load_workbook from openpyxl.cell import WriteOnlyCell +from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE from openpyxl.styles import Font, Border, Side, Alignment, PatternFill +from openpyxl.utils.exceptions import IllegalCharacterError from openpyxl.worksheet.worksheet import Worksheet import app.scodoc.sco_utils as scu @@ -366,8 +368,17 @@ class ScoExcelSheet: value = value.replace(tzinfo=None) # création de la cellule - cell = WriteOnlyCell(self.ws, value) - + try: + cell = WriteOnlyCell(self.ws, value) + except IllegalCharacterError as exc: + if isinstance(value, str): + # chaine contenant un caractère interdit dans Excel: élimine + value = ILLEGAL_CHARACTERS_RE.sub("", value) + cell = WriteOnlyCell(self.ws, value) + else: + raise ScoValueError( + f"Valeur de cellule non autorisée: {value}" + ) from exc # recopie des styles if style is None: style = self.default_style diff --git a/sco_version.py b/sco_version.py index 007858c8e..efbf91609 100644 --- a/sco_version.py +++ b/sco_version.py @@ -3,7 +3,7 @@ "Infos sur version ScoDoc" -SCOVERSION = "9.7.63" +SCOVERSION = "9.7.64" SCONAME = "ScoDoc"