Skip to content

Rétrograde la version d’openpyxl pour charger les données France Relance

Ronan Amicel requested to merge fix-france-relance-xlsx into main

Problème

La version 3.1.x de la bibliothèque openpyxl semble plus stricte sur la validation des fichiers XLSX, et refuse maintenant de charger en particulier le fichier France_Relance_Synthèse_déploiement_PV.xlsx.

Traceback (most recent call last):
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/reader/excel.py", line 301, in read
    self.read_worksheets()
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/reader/excel.py", line 237, in read_worksheets
    ws_parser.bind_all()
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/worksheet/_reader.py", line 465, in bind_all
    self.bind_cells()
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/worksheet/_reader.py", line 368, in bind_cells
    for idx, row in self.parser.parse():
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/worksheet/_reader.py", line 163, in parse
    obj = prop[1].from_tree(element)
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 87, in from_tree
    obj = desc.expected_type.from_tree(el)
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/descriptors/serialisable.py", line 103, in from_tree
    return cls(**attrib)
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/worksheet/filters.py", line 184, in __init__
    self.val = val
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/worksheet/filters.py", line 165, in __set__
    raise ValueError("Value must be either numerical or a string containing a wildcard")
ValueError: Value must be either numerical or a string containing a wildcard

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/ronan/dev/anct/insitu/insitu/importer/helpers.py", line 77, in try_to_import_datasets
    importer.load()
  File "/home/ronan/dev/anct/insitu/insitu/importer/importers.py", line 301, in load
    self.wb = load_workbook(
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/reader/excel.py", line 346, in load_workbook
    reader.read()
  File "/home/ronan/.virtualenvs/insitu/lib/python3.9/site-packages/openpyxl/reader/excel.py", line 307, in read
    raise ValueError(
ValueError: Unable to read workbook: could not read worksheets from ../datasets/France_Relance_Synthèse_déploiement_PV.xlsx.
This is most probably because the workbook source files contain some invalid XML.

Une autre personne qui soulève le problème ici : https://foss.heptapod.net/openpyxl/openpyxl/-/issues/2055

Solution

Peut-être que le fichier source est invalide, mais avant on arrivait à le charger, donc on rétrograde la version d’openpyxl…

Merge request reports