Python ошибка при загрузке xlsx excel xlsx files not supported
Pandas можно использовать для чтения и записи файлов Excel с помощью Python. Это работает по аналогии с другими форматами. В этом материале рассмотрим, как это делается с помощью DataFrame.
Помимо чтения и записи рассмотрим, как записывать несколько DataFrame в Excel-файл, как считывать определенные строки и колонки из таблицы и как задавать имена для одной или нескольких таблиц в файле.
Установка Pandas
Для начала Pandas нужно установить. Проще всего это сделать с помощью pip .
Если у вас Windows, Linux или macOS:
В процессе можно столкнуться с ошибками ModuleNotFoundError или ImportError при попытке запустить этот код. Например:
В таком случае нужно установить недостающие модули:
Запись в файл Excel с python
Будем хранить информацию, которую нужно записать в файл Excel, в DataFrame . А с помощью встроенной функции to_excel() ее можно будет записать в Excel.
Сначала импортируем модуль pandas . Потом используем словарь для заполнения DataFrame :
Ключи в словаре — это названия колонок. А значения станут строками с информацией.
Теперь можно использовать функцию to_excel() для записи содержимого в файл. Единственный аргумент — это путь к файлу:
Стоит обратить внимание на то, что в этом примере не использовались параметры. Таким образом название листа в файле останется по умолчанию — «Sheet1». В файле может быть и дополнительная колонка с числами. Эти числа представляют собой индексы, которые взяты напрямую из DataFrame.
Поменять название листа можно, добавив параметр sheet_name в вызов to_excel() :
Также можно добавили параметр index со значением False , чтобы избавиться от колонки с индексами. Теперь файл Excel будет выглядеть следующим образом:
Запись нескольких DataFrame в файл Excel
Также есть возможность записать несколько DataFrame в файл Excel. Для этого можно указать отдельный лист для каждого объекта:
Здесь создаются 3 разных DataFrame с разными названиями, которые включают имена сотрудников, а также размер их зарплаты. Каждый объект заполняется соответствующим словарем.
Объединим все три в переменной salary_sheets , где каждый ключ будет названием листа, а значение — объектом DataFrame .
Дальше используем движок xlsxwriter для создания объекта writer . Он и передается функции to_excel() .
Перед записью пройдемся по ключам salary_sheets и для каждого ключа запишем содержимое в лист с соответствующим именем. Вот сгенерированный файл:
Можно увидеть, что в этом файле Excel есть три листа: Group1, Group2 и Group3. Каждый из этих листов содержит имена сотрудников и их зарплаты в соответствии с данными в трех DataFrame из кода.
Параметр движка в функции to_excel() используется для определения модуля, который задействуется библиотекой Pandas для создания файла Excel. В этом случае использовался xslswriter , который нужен для работы с классом ExcelWriter . Разные движка можно определять в соответствии с их функциями.
В зависимости от установленных в системе модулей Python другими параметрами для движка могут быть openpyxl (для xlsx или xlsm) и xlwt (для xls). Подробности о модуле xlswriter можно найти в официальной документации.
Наконец, в коде была строка writer.save() , которая нужна для сохранения файла на диске.
Чтение файлов Excel с python
По аналогии с записью объектов DataFrame в файл Excel, эти файлы можно и читать, сохраняя данные в объект DataFrame . Для этого достаточно воспользоваться функцией read_excel() :
Я использую xlrd для обработки файлов .xls и openpyxl для обработки файлов .xlsx, и это работает хорошо.
Затем мне передают то, что якобы является файлом .xls, поэтому я пытаюсь xlrd.open_workbook() и получить:
Я смотрю на этот вопрос и я предполагаю, что мой файл, хотя и заканчивается расширением .xls, на самом деле должен быть .xlsx. И действительно, я могу просмотреть его в текстовом редакторе:
(из соображений конфиденциальности я не могу опубликовать весь файл, но, вероятно, он не требуется для нашего анализа).
Поэтому я предполагаю, что если я просто скопирую ( cp ) его в .xlsx, я смогу открыть его с помощью ---- +: = 6 =: + ----, но я получаю:
Если это на самом деле xls (маловероятно), но его нельзя открыть с помощью BadZipfile: File is not a zip file , и если это вообще xlsx, но он может не открывается с помощью xlrd , даже после того, как я openpyxl это к .xlsx, что делать?
Примечание. Если я открою .xls в Excel, сохраните его как .xlsx и повторите попытку с cp , он загружается нормально, но этот ручной шаг не является роскошью, которую я буду иметь при выполнении моей программы.
3 ответа
Ясно одно: файл, который вы пытаетесь открыть, имеет другой формат, чем предполагает его расширение.
Как вы уже знаете, форматы файлов Excel включают (но не ограничиваются ими) xls и xlsx
Формат Excel 2003 ( xls ) является двоичным форматом. Это означает, что если вы откроете файл xls в текстовом редакторе, вы просто увидите бред.
Формат Excel 2007 ( xlsx ) совершенно другой. Файл xlsx - это zip-файл с кучей XML-файлов внутри. Вы можете использовать zip-архиватор для извлечения содержимого файла xlsx . Затем вы можете редактировать файлы XML, используя любой текстовый редактор. Однако открытие файла xlsx непосредственно в текстовом редакторе похоже на открытие zip файл с текстовым редактором: вы просто увидите тарабарщину.
Тот факт, что вы можете открыть свой файл в текстовом редакторе (и прочитать его содержимое), показывает, что он не является ни xls и файл xlsx . Ваш файл не является ни двоичным, ни zip-файлом, это обычный XML-файл.
Это означает, что openpyxl пытается открыть ваш файл как xlsx и, следовательно, файл zip . Но когда он пытается извлечь его содержимое, он терпит неудачу, потому что ваш файл даже не является zip-файлом.
Но если файл не является ни xlsx , ни xls файл, как его можно прочитать в Microsoft Excel? Мне тоже это интересно. После некоторых исследований я считаю, что ваш файл имеет формат файла XML Spreadsheet 2003 . Этот пример очень похож на содержимое файла, которое вы опубликовали. Поскольку Microsoft Excel поддерживает этот формат, неудивительно, что он может читать ваш файл.
К сожалению, библиотеки Python, такие как xlrd и openpyxl поддерживает только xls и xlsx форматы файлов, поэтому они не смогут прочитать ваш файл. Я думаю, вам просто нужно вручную преобразовать его в поддерживаемый формат.
Я не на OSX, поэтому это не проверено. Вы можете использовать пакет appscript , несмотря на отсутствие поддержки, чтобы открыть файл-нарушитель и восстановить его.
уже несколько недель у меня есть проблема при загрузке файла .xlsx protected, где один из этих листов защищен паролем.
Если я освобождаю лист от пароля openpyxl работает нормально, если я ставлю пароль, я получаю эту ошибку:
"Excel opening errorFile is not a zip file"
Я читал в интернете, что недавно Microsoft изменила что-то в формате .xlsx, но не более того. Спасибо
1 ответ
Я работал над программой для ввода некоторых данных в файл excel с помощью Openpyxl с возможностью загрузки существующего файла или создания нового. При создании нового файла я могу записать данные в файл excel без каких-либо проблем, но загрузка из существующего файла и попытка записать новые.
Я использую openpyxl для чтения файла excel. Для моего приложения мне нужно прочитать цвет фона ячейки в файле xlsx Но я не могу найти, как загрузить эту цветовую информацию. Я попытался использовать cell.style.fill.color.index, но он возвращает только FFFFFFFF в качестве фона, что неверно для.
Исходя из этой проблемы в трекере ошибок openpyxl , защищенные паролем файлы не поддерживаются.
– Защита паролем в настоящее время не поддерживается.
– Это когда-нибудь будет поддержано?
– нет, потому что это проприетарный код MS, не подпадающий под спецификацию OOXML.
Похожие вопросы:
Я пытаюсь импортировать данные excel в свое приложение angular с помощью этой библиотеки: XLSX -файл Но когда я скачал проект и попытался запустить его локально,при загрузке файла excel я получаю.
Я пытаюсь загрузить файл excel с помощью Openpyxl в Python. from openpyxl import load_workbook wb2 = load_workbook('Book1.xlsx') print wb2.get_sheet_names() Это всего лишь три строчки. и он выдает.
Я работал над программой для ввода некоторых данных в файл excel с помощью Openpyxl с возможностью загрузки существующего файла или создания нового. При создании нового файла я могу записать данные.
Я использую openpyxl для чтения файла excel. Для моего приложения мне нужно прочитать цвет фона ячейки в файле xlsx Но я не могу найти, как загрузить эту цветовую информацию. Я попытался.
Я с помощью openpyxl в import файлы/экспорт в формате XLSX. Но я не могу import load_workbook() файл, который я экспортировал с помощью openpyxl . Я должен открыть экспортированный файл xlsx в.
Я хочу прочитать файл xlsx с помощью openpyxl. Вот типичный код, который я использую: import openpyxl wb = openpyxl.load_workbook(example.xlsx) sh = wb.get_sheet_by_name(name=Sheet3) or.
У меня есть проблема с библиотекой openpyxl. Проблема : Когда я использовал xlwt, открыл файл .xls и написал там несколько ячеек, стили ячеек, к которым я не прикасался, остались прежними. Но теперь.
Нам нужно обновить лист xlsx с помощью скрипта python, который выполняет некоторые вычисления и обновляет один лист. Я выбираю openpyxl, так как он поддерживает запись / обновление файла xlsx. В.
Я столкнулся с проблемой при загрузке файла xlsx. На листе есть гиперссылка в объединенной ячейке. При загрузке файла произошла ошибка. Может кто-нибудь Код точно такой же. workbook =.
.xlsx – это расширение документа Excel, который может хранить большой объем данных в табличной форме. Более того, в электронной таблице Excel можно легко выполнять многие виды арифметических и логических вычислений.
Иногда программистам требуется прочитать данные из документа Excel. В Python для этого есть множество различных библиотек, например, xlrd , openpyxl и pandas . Сегодня мы поговорим о том, как читать excel-файлы (xlsx) при помощи Python, и рассмотрим примеры использования различных библиотек для этих целей.
Для начала
Для проверки примеров этого руководства потребуется какой-нибудь файл Excel с расширением .xlsx , содержащий какие-либо исходные данные. Вы можете использовать любой существующий файл Excel или создать новый. Мы создадим новый файл с именем sales.xlsx со следующими данными:
sales.xlsx
Sales Date | Sales Person | Amount |
---|---|---|
12/05/18 | Sila Ahmed | 60000 |
06/12/19 | Mir Hossain | 50000 |
09/08/20 | Sarmin Jahan | 45000 |
07/04/21 | Mahmudul Hasan | 30000 |
Этот файл мы и будем читать с помощью различных библиотек Python в следующей части этого руководства.
Чтение Excel-файла с помощью xlrd
Библиотека xlrd не устанавливается вместе с Python по умолчанию, так что ее придется установить. Последняя версия этой библиотеки, к сожалению, не поддерживает Excel-файлы с расширением .xlsx . Поэтому устанавливаем версию 1.2.0. Выполните следующую команду в терминале:
После завершения процесса установки создайте Python-файл, в котором мы будем писать скрипт для чтения файла sales.xlsx с помощью модуля xlrd.
Воспользуемся функцией open_workbook() для открытия файла xlsx для чтения. Этот файл Excel содержит только одну таблицу. Поэтому функция workbook.sheet_by_index() используется в скрипте со значением аргумента 0.
Затем используем вложенный цикл for . С его помощью мы будем перемещаться по ячейкам, перебирая строки и столбцы. Также в скрипте используются две функции range() для определения количества строк и столбцов в таблице.
Для чтения значения отдельной ячейки таблицы на каждой итерации цикла воспользуемся функцией cell_value() . Каждое поле в выводе будет разделено одним пробелом табуляции.
Запустим наш код и получим следующий результат.
Чтение Excel-файла с помощью openpyxl
Openpyxl – это еще одна библиотека Python для чтения файла .xlsx , и она также не идет по умолчанию вместе со стандартным пакетом Python. Чтобы установить этот модуль, выполните в терминале следующую команду:
После завершения процесса установки можно начинать писать код для чтения файла sales.xlsx.
Как и модуль xlrd, модуль openpyxl имеет функцию load_workbook() для открытия excel-файла для чтения. В качестве значения аргумента этой функции используется файл sales.xlsx.
Объект wookbook.active служит для чтения значений свойств max_row и max_column . Эти свойства используются во вложенных циклах for для чтения содержимого файла sales.xlsx.
Запустив наш скрипт, получим следующий вывод.
Чтение Excel-файла с помощью pandas
Если вы не пользовались библиотекой pandas ранее, вам необходимо ее установить. Как и остальные рассматриваемые библиотеки, она не поставляется вместе с Python. Выполните следующую команду, чтобы установить pandas из терминала.
После завершения процесса установки создаем файл Python и начинаем писать следующий скрипт для чтения файла sales.xlsx.
В библиотеке pandas есть функция read_excel() , которую можно использовать для чтения .xlsx -файлов. Ею мы и воспользуемся в нашем скрипте для чтения файла sales.xlsx.
Функция DataFrame() используется для чтения содержимого нашего файла и преобразования имеющейся там информации во фрейм данных. После мы сохраняем наш фрейм в переменной с именем data . А дальше выводим то, что лежит в data , в консоль.
После запуска кода мы получим следующий вывод.
Заключение
Программистам довольно часто приходится работать с файлами .xlsx . Сегодня мы рассмотрели, как читать excel-файлы при помощи Python. Мы разобрали три различных способа с использованием трех библиотек. Все эти библиотеки имеют разные функции и свойства.
Надеемся, теперь у вас не возникнет сложностей с чтением этих файлов в ваших скриптах.
Читайте также: