xlrd.biffh.XLRDError: файл Excel xlsx; не поддерживается

Я пытаюсь прочитать рабочий лист Excel с поддержкой макросов, используя pandas.read_excel с библиотекой xlrd. Он работает нормально в локальной среде, но когда я пытаюсь вставить то же самое в PCF, я получаю эту ошибку:

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

Как я могу решить эту ошибку?


person Vignesh K    schedule 11.12.2020    source источник
comment
Отвечает ли это на ваш вопрос? панды не могут открыть файл xlsx   -  person Chris Withers    schedule 13.12.2020


Ответы (2)


Как указано в сообщении о выпуске, связанном с из релизного твита и отмечено большим оранжевым предупреждением на первой странице документация и менее оранжевая, но все еще присутствующая в файле readme в репозитории и выпуск на Пипи:

В xlrd явно удалена поддержка всего, кроме файлов xls.

В вашем случае решение состоит в следующем:

  • убедитесь, что вы используете последнюю версию Pandas, по крайней мере, 1.0.1 и, желательно, последнюю версию. 1.2 сделает его еще яснее.
  • установить openpyxl: https://openpyxl.readthedocs.io/en/stable/
  • change your Pandas code to be:
    df1 = pd.read_excel(
         os.path.join(APP_PATH, "Data", "aug_latest.xlsm"),
         engine='openpyxl',
    )
    
person Chris Withers    schedule 12.12.2020
comment
что делать, если вы не знаете имя листа? Вы можете передать это pd.ExcelFile? - person Christopher Turnbull; 13.12.2020
comment
Крис, спасибо за обновление xlrd для поддержки Python 3.9. Однако это серьезное изменение в пакете без предупреждения об устаревании, поэтому я бы предложил более информативное сообщение об ошибке, например. разъяснение, когда (дата и версия) xlrd прекратил поддержку файлов, отличных от xls. - person khyox; 14.12.2020
comment
@kyox - в репозитории было уведомление более года, а различные объявления в списке рассылки и в других местах были опубликованы более четырех лет назад. - person Chris Withers; 14.12.2020
comment
@ChristopherTurnbull указывать имя листа необязательно. Если его не указать, будет открыт первый лист в файле. - person data.dude; 14.12.2020
comment
Согласно этому разработчику панд и обсуждению выше, ссылка очевидно xlrd больше не поддерживает файлы .xlsx. Следует дождаться новейшей версии pandas 1.2.0 или поставить параметр read_excel(engine='openpyxl') - person BrunoSE; 22.12.2020
comment
Я устанавливаю pandas==1.1.4 и xlrd==1.2.0 - person Kairat Koibagarov; 12.01.2021
comment
@KairatKoibagarov - как я уже много раз говорил в качестве сопровождающего xlrd: это крайне плохой выбор. - person Chris Withers; 12.01.2021
comment
Установка модуля pip install openpyxl и включение во все мои функции read_excel движка openpyxl read_excel("my.xlsx",engine='openpyxl') сэкономили мой код и мое время! Большое спасибо @ChrisWithers! - person Corina Roca; 13.01.2021
comment
Поскольку пользователь, который на самом деле не ЗНАЛ, что pandas использует xlrd для открытия файлов xlsx, предупреждение об устаревании, исходящее из кода, было бы ДЕЙСТВИТЕЛЬНО полезным... Я не могу прочитать все списки рассылки всех библиотек, которые я ВОЗМОЖНО, может использовать где-то 3 слоя в моем коде... - person Brian Postow; 10.06.2021
comment
Хороший ответ, но пассивно-агрессивный, снисходительный тон бесполезен для многочисленных менее технических пользователей панд. Подобно сварливому проверяющему TSA, вы предполагаете, что каждый представитель общественности так же хорошо знаком с программным обеспечением, как и вы. - person JPKab; 24.06.2021

Может показаться, что предыдущая версия xlrd 1.2.0 работает, но она также может подвергать вас потенциальным уязвимостям безопасности. После этого предупреждения, если вы все еще хотите попробовать, введите следующую команду:

pip install xlrd==1.2.0
person tryhard    schedule 11.12.2020
comment
Это абсолютно неправильный ответ. Не используйте xlrd для чтения файлов xlsx, используйте openpyxl.readthedocs.io/en/stable . - person Chris Withers; 12.12.2020
comment
@tryhard Что вы подразумеваете под потенциальными уязвимостями безопасности? - person Ric S; 16.12.2020
comment
@RicS - это было из моего редактирования. Файлы .xlsx представляют собой zip-файлы, содержащие xml, и zip, и xml имеют хорошо опубликованные проблемы безопасности, с которыми xlrd плохо справился. - person Chris Withers; 19.12.2020
comment
@ChrisWithers, почему это решение вместо исправления поддержки xlsx? - person robertspierre; 20.12.2020
comment
Это сработало для меня! спасибо!! - person Freddy Daniel; 15.01.2021
comment
Более ранняя версия xlrd может иметь некоторые уязвимости, но для некоторых (старых) библиотек требуется именно эта версия xlrd. - person DevX; 17.05.2021
comment
@ChrisWithers, ваш первый комментарий не xlrd для чтения xlsx, почему бы и нет? Вы можете объяснить ? - person Tokci; 17.06.2021