xlrd.biffh.XLRDError: archivo Excel xlsx; No soportado [duplicate]

4 minutos de lectura

avatar de usuario
Vignesh K.

Estoy tratando de leer una hoja de cálculo de Excel habilitada para macros usando pandas.read_excel con la biblioteca xlrd. Funciona bien en local, pero cuando intento insertar lo mismo en PCF, aparece este error:

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

¿Cómo puedo resolver este error?

  • ¿Responde esto a tu pregunta? los pandas no pueden abrir el archivo xlsx

    – Chris Withers

    13 de diciembre de 2020 a las 18:29

avatar de usuario
Chris Withers

Como se señaló en el correo electrónico de lanzamientovinculado desde el publicar tuit y anotado en una gran advertencia naranja que aparece en la portada del documentacióny menos anaranjado, pero aún presente, en el Léame en el repositorio y el lanzamiento en pypi:

xlrd ha eliminado explícitamente la compatibilidad con todo lo que no sean archivos xls.

En tu caso, la solución es:

  • asegúrese de tener una versión reciente de Pandas, al menos 1.0.1, y preferiblemente la última versión. 1.2 lo hará aún más claro.
  • Instalar en pc openpyxl: https://openpyxl.readthedocs.io/en/stable/
  • cambia tu código de Pandas para que sea:
    df1 = pd.read_excel(
         os.path.join(APP_PATH, "Data", "aug_latest.xlsm"),
         engine="openpyxl",
    )
    

  • Chris, gracias por la actualización de xlrd para admitir Python 3.9. Sin embargo, este es un cambio importante en el paquete sin advertencia de obsolescencia, por lo que sugeriría un mensaje de error más informativo, por ejemplo, aclarando cuándo (fecha y versión) xlrd eliminó la compatibilidad con archivos que no son xls.

    – khiox

    14 de diciembre de 2020 a las 2:05

  • @ChristopherTurnbull especificar el nombre de la hoja es opcional. Si lo omite, se abrirá la primera hoja del archivo.

    – data.dude

    14 de diciembre de 2020 a las 11:36

  • Instalación del módulo pip install openpyxl e incluyendo en todas mis funciones read_excel el motor openpyxl read_excel("my.xlsx",engine='openpyxl') guardó mi código y mi tiempo! ¡Muchas gracias @ChrisWithers!

    –Corina Roca

    13 de enero de 2021 a las 13:21


  • Como un usuario que en realidad no SABÍA que pandas estaba usando xlrd para abrir archivos xlsx, una advertencia de obsolescencia proveniente del código habría sido MUY útil… No puedo leer todas las listas de correo de todas las bibliotecas que POSIBLEMENTE podría estar usando, en algún lugar de 3 capas de profundidad en mi código …

    –Brian Postow

    10 de junio de 2021 a las 18:29

  • Buena respuesta, pero el tono pasivo, agresivo y condescendiente no es útil para los numerosos usuarios menos técnicos de pandas. Al igual que un evaluador malhumorado de la TSA, está asumiendo que cada miembro del público está tan profundamente familiarizado como usted con una pieza de software.

    – JPKab

    23/06/2021 a las 21:20

avatar de usuario
eforzarse

La versión anterior, xlrd 1.2.0, puede parecer que funciona, pero también podría exponerlo a posibles vulnerabilidades de seguridad. Con esa advertencia fuera del camino, si aún desea intentarlo, escriba el siguiente comando:

pip install xlrd==1.2.0

  • Esta es absolutamente la respuesta incorrecta. No use xlrd para leer archivos xlsx, use openpyxl.readthedocs.io/en/stable.

    – Chris Withers

    12 de diciembre de 2020 a las 14:38

  • @tryhard ¿Qué quiere decir con “vulnerabilidades de seguridad potenciales”?

    – Ric S.

    16 de diciembre de 2020 a las 9:15

  • @RicS: eso fue de mi edición. Los archivos .xlsx son archivos zip que contienen xml, tanto zip como xml tienen problemas de seguridad bien publicados que xlrd hizo un mal trabajo al abordar.

    – Chris Withers

    19 de diciembre de 2020 a las 7:55

  • @ChrisWithers, ¿por qué esta decisión en lugar de arreglar el soporte para xlsx?

    – robertspierre

    20 de diciembre de 2020 a las 15:36


  • La versión inferior de xlrd puede tener algunas vulnerabilidades, pero algunas bibliotecas (antiguas) requieren esta versión exacta de xlrd

    – DevX

    17 de mayo de 2021 a las 6:48

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad