diff options
Diffstat (limited to 'odoo/tools/misc.py')
| -rw-r--r-- | odoo/tools/misc.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/odoo/tools/misc.py b/odoo/tools/misc.py index 45ff5e28bbd..448ffdfed43 100644 --- a/odoo/tools/misc.py +++ b/odoo/tools/misc.py @@ -374,6 +374,28 @@ try: except ImportError: xlwt = None +try: + import xlsxwriter + + # add some sanitizations to respect the excel sheet name restrictions + # as the sheet name is often translatable, can not control the input + class PatchedXlsxWorkbook(xlsxwriter.Workbook): + + # TODO when xlsxwriter bump to 0.9.8, add worksheet_class=None parameter instead of kw + def add_worksheet(self, name=None, **kw): + # invalid Excel character: []:*?/\ + name = re.sub(r'[\[\]:*?/\\]', '', name) + + # maximum size is 31 characters + name = name[:31] + return super(PatchedXlsxWorkbook, self).add_worksheet(name, **kw) + + xlsxwriter.Workbook = PatchedXlsxWorkbook + +except ImportError: + xlsxwriter = None + + def to_xml(s): return s.replace('&','&').replace('<','<').replace('>','>') |
