xlrd.biffh.XLRDError: fichier Excel xlsx; non pris en charge [dupliquer]

Dec 11 2020

J'essaie de lire une feuille de calcul Excel pandas.read_excelprenant en charge les macros en utilisant la bibliothèque xlrd. Cela fonctionne bien en local, mais lorsque j'essaie de pousser la même chose dans PCF, j'obtiens cette erreur:

2020-12-11T21:09:53.441+05:30 [APP/PROC/WEB/0] [ERR] df1=pd.read_excel(os.path.join(APP_PATH, os.path.join("Data", "aug_latest.xlsm")),sheet_name=None)

2020-12-11T21:09:53.441+05:30 [APP/PROC/WEB/0] [ERR] return open_workbook(filepath_or_buffer)
2020-12-11T21:09:53.441+05:30 [APP/PROC/WEB/0] [ERR] File "/home/vcap/deps/0/python/lib/python3.8/site-packages/xlrd/__init__.py", line 170, in open_workbook
2020-12-11T21:09:53.441+05:30 [APP/PROC/WEB/0] [ERR] raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
2020-12-11T21:09:53.441+05:30 [APP/PROC/WEB/0] [ERR] xlrd.biffh.XLRDError: Excel xlsx file; not supported

Comment puis-je résoudre cette erreur?

Réponses

154 ChrisWithers Dec 12 2020 at 21:49

Comme indiqué dans l' e - mail de publication , lié à partir du tweet de publication et noté dans un gros avertissement orange qui apparaît sur la première page de la documentation , et moins orange, mais toujours présent, dans le readme sur le référentiel et la version sur pypi :

xlrd a explicitement supprimé la prise en charge de tout autre chose que les fichiers xls.

Dans votre cas, la solution est de:

  • assurez-vous que vous utilisez une version récente de Pandas, au moins 1.0.1, et de préférence la dernière version. 1.2 rendra son encore plus clair.
  • installer openpyxl:https://openpyxl.readthedocs.io/en/stable/
  • changez votre code Pandas pour être:
    df1 = pd.read_excel(
         os.path.join(APP_PATH, "Data", "aug_latest.xlsm"),
         engine='openpyxl',
    )
    
65 tryhard Dec 11 2020 at 23:47

La version précédente, xlrd 1.2.0, peut sembler fonctionner, mais elle pourrait également vous exposer à des vulnérabilités de sécurité potentielles. Avec cet avertissement à l'écart, si vous voulez toujours essayer, tapez la commande suivante:

pip install xlrd==1.2.0