From 985c6df3b68cbff64122e2156bb5cfb16abb9a3e Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Mon, 20 Sep 2021 15:54:38 +0200 Subject: [PATCH] empeche noms de feuilles excel invalides --- app/scodoc/sco_excel.py | 5 +++++ app/scodoc/sco_utils.py | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/scodoc/sco_excel.py b/app/scodoc/sco_excel.py index 1e70858aab..eb1eb3a0d4 100644 --- a/app/scodoc/sco_excel.py +++ b/app/scodoc/sco_excel.py @@ -72,6 +72,11 @@ def xldate_as_datetime(xldate, datemode=0): def adjust_sheetname(sheet_name): + """Renvoie un nom convenable pour une feuille excel: < 31 cars, sans caractères spéciaux + Le / n'est pas autorisé par exemple. + Voir https://xlsxwriter.readthedocs.io/workbook.html#add_worksheet + """ + sheet_name = scu.make_filename(sheet_name) # Le nom de la feuille ne peut faire plus de 31 caractères. # si la taille du nom de feuille est > 31 on tronque (on pourrait remplacer par 'feuille' ?) return sheet_name[:31] diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index 1b0acdcac8..fc851d39cd 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -480,14 +480,17 @@ def sanitize_string(s): return suppress_accents(s.translate(trans)).replace(" ", "_").replace("\t", "_") -_BAD_FILENAME_CHARS = str.maketrans("", "", ":/\\&") +_BAD_FILENAME_CHARS = str.maketrans("", "", ":/\\&[]*?'") def make_filename(name): """Try to convert name to a reasonable filename without spaces, (back)slashes, : and without accents """ - return suppress_accents(name.translate(_BAD_FILENAME_CHARS)).replace(" ", "_") + return ( + suppress_accents(name.translate(_BAD_FILENAME_CHARS)).replace(" ", "_") + or "scodoc" + ) VALID_CARS = (