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"