Загрузка Django в Excel
Обновлено: 21.11.2024
- импорт данных Excel в базы данных и экспорт из них
- преобразовать загруженный файл Excel непосредственно в структуру данных Python
- передать структуры данных Python в виде загружаемого файла Excel
- обеспечить сохранение данных в виде файла Excel на стороне сервера
- поддерживает csv, tsv, csvz, tsvz по умолчанию, а другие форматы поддерживаются с помощью следующих подключаемых модулей:
Эта библиотека делает обработку информации с использованием различных файлов Excel такой же простой, как обработка массива, словарь при обработке загрузки/выгрузки файлов, импорт данных в базы данных SQL и экспорт из них, анализ информации и сохранение. Он использует pyexcel и его плагины: 1) для предоставления единого программного интерфейса для обработки форматов csv, tsv, xls, xlsx, xlsm и ods. 2) предоставить универсальную утилиту для импорта данных из загруженного файла в базу данных и экспорта таблиц в базу данных в виде файлов Excel для загрузки файла 3) предоставить тот же интерфейс для сохранения информации на стороне сервера: сохранение загруженного файла Excel в и загрузки сохраненного файла Excel из файловой системы.
Установка¶
Вы можете установить его через pip:
или клонируйте его и установите:
Установка отдельных плагинов, см. страницу отдельных плагинов.
Настройка¶
Вам потребуется обновить файл settings.py:
Учебник¶
Чтобы погрузиться в django-excel и быстро получить практический опыт, здесь будет представлено тестовое приложение для django-excel. Поэтому рекомендуется проверить код с github
Тестовое приложение написано в соответствии с частью 1, частью 2 и частью 3 руководства по django версии 1.7.1. Если вам интересно, как было написано тестовое приложение, посетите документацию по django и вернитесь.
После того, как вы получите код, перейдите в каталог django-excel, а затем установите все зависимости:
Затем запустите тестовое приложение:
Обработка загрузки и скачивания файлов Excel¶
Выберите лист Excel, например файл xls, и нажмите «Отправить». Вы получите CSV-файл для загрузки.
Откройте файл polls/views.py и сосредоточьтесь на следующем фрагменте кода:
UploadFileForm — это html-виджет для формы загрузки файлов на html-странице. Затем посмотрите вниз на дескриптор файла. Это экземпляр либо ExcelInMemoryUploadedFile, либо TemporaryUploadedExcelFile, которые наследуют ExcelMixin и, следовательно, имеют список вызываемых методов преобразования, таких как get_sheet, get_array и т. д.
Для ответа make_response() преобразует экземпляр Sheet, полученный с помощью get_sheet(), в CSV-файл для загрузки.
Пожалуйста, не стесняйтесь изменять эти функции в соответствии с таблицей сопоставления.
Обработка импорта данных¶
В этом примере показано, как импортировать загруженный файл Excel в модели django. Мы собираемся импортировать sample-data.xls
Текст вопроса | Дата публикации | Уникальный идентификатор | < /tr>
---|---|---|
Какой ваш любимый язык программирования? | 28/01/15 | язык td> |
Какая ваша любимая IDE? | 29/01/15 | ide |
Вопрос | Выбор | Голосование |
---|---|---|
язык | Java | 0 |
язык | C++ | 0 |
язык | C | 0 td> |
ide | Eclipse | 0 |
ide | Visual Studio | 0 |
ide | PyCharm | 0 |
ide | IntelliJ | 0 |
в следующие модели данных:
За исключением добавленного поля «slug», «Вопрос» и «Выбор» скопированы из учебника Django, часть 1.
И выбор тоже:
Вы можете использовать интерфейс администратора, чтобы удалить все эти объекты и повторить попытку.
Теперь откройте polls/views.py и сосредоточьтесь на этой части кода:
Звездочка - save_book_to_database() .Модели параметров могут быть списком моделей django или списком кортежей, каждый из которых содержит:
- модель django (обязательно)
- массив полей модели или словарь карт ключей
- функция пользовательского форматирования
- индекс строки с именами полей
- индекс столбца с именами полей
Когда во втором элементе кортежа указан массив полей модели, имена предоставленных полей должны совпадать с именами полей соответствующей модели django (первый член кортежа) и последовательностью предоставленных полей. должен совпадать с загруженным листом Excel. Например:
Когда предоставляется словарь карт ключей, его ключами должны быть имена полей в загруженном листе Excel, а значением должно быть фактическое имя поля в соответствующей модели django. Например:
Функция пользовательского форматирования необходима, когда данные из листа Excel нуждаются в переводе перед импортом данных. Например, Choice имеет внешний ключ для Question. Когда данные выбора должны быть импортированы, столбец «Вопрос» необходимо преобразовать в экземпляр вопроса. В нашем примере столбец «Вопрос» на «Листе 2» содержит значения из столбца «Уникальный идентификатор» на «Листе 1».
Обработка экспорта данных¶
Пожалуйста, сохраните и откройте его. Вы увидите эти данные в своем окне:
Теперь давайте рассмотрим код, стоящий за этим, в polls/views.py:
Все поддерживаемые типы данных¶
Вот таблица функций для всех поддерживаемых типов данных:
структура данных | из файла в структуры данных | из структур данных в ответ |
---|---|---|
dict | get_dict() | make_response_from_dict() |
записи | get_records() | make_response_from_records()< /tt> |
список списков | get_array() | make_response_from_array( ) |
dict списка списков | get_book_dict() | < tt>make_response_from_book_dict() |
Лист | get_sheet() td> | make_response() |
Book | get_book() | make_response() |
таблица базы данных | save_to_database() | make_response_from_a_table() |
список таблиц базы данных | make_response_from_tables() |
Дополнительные примеры структур данных см. в документации pyexcel
.Справочник по API¶
django-excel прикрепляет функции pyexcel к InMemoryUploadedFile и TemporaryUploadedFile.
- sheet_name — для книги Excel может быть несколько листов. Если он не указан, загружается лист с индексом 0. Для файлов CSV и TSV параметру имя_листа в любом случае должно быть присвоено значение None.
- ключевые слова — дополнительные ключевые слова в библиотеке pyexcel
двумерный массив, список списков
словарь содержимого файла
список словаря содержимого файла
таблица базы данных или кортеж, которые имеют эту последовательность (table, table_init_func, mapdict, name_columns_by_row, name_rows_by_column)
- tables — список таблиц или кортежей базы данных, которые имеют эту последовательность (table, table_init_func, mapdict, name_columns_by_row, name_rows_by_column), см. save_to_database()
- ключевые слова — дополнительные ключевые слова в библиотеке pyexcel
Методы ответа¶
одна из следующих строк:
Создать книгу Excel на одном листе file_type
Создать многостраничную книгу Excel file_type. Он становится таким же, как make_response_from_a_table(), если вы передаете tables с массивом, содержащим одну таблицу
Когда Django обрабатывает загрузку файла, данные файла в конечном итоге помещаются в request.FILES (дополнительную информацию об объекте запроса см. в документации по объектам запроса и ответа). В этом документе объясняется, как файлы хранятся на диске и в памяти, а также как настроить поведение по умолчанию.
Существует угроза безопасности, если вы принимаете загруженный контент от ненадежных пользователей! См. раздел руководства по безопасности «Контент, загруженный пользователями», чтобы узнать, как устранить проблему.
Основная загрузка файлов¶
Рассмотрите простую форму, содержащую FileField:
Представление, обрабатывающее эту форму, получит данные файла в request.FILES , который представляет собой словарь, содержащий ключ для каждого FileField (или ImageField , или другого подкласса FileField) в форме. Таким образом, данные из приведенной выше формы будут доступны как request.FILES['file'] .
Обратите внимание, что request.FILES будет содержать данные только в том случае, если метод запроса был POST и отправивший запрос имеет атрибут enctype="multipart/form-data" . В противном случае request.FILES будет пустым.
В большинстве случаев вы просто передаете данные файла из запроса в форму, как описано в разделе «Связь с телеверсиями и формулами». Это будет выглядеть примерно так:
Обратите внимание, что мы должны передать request.FILES в конструктор формы; именно так данные файла связываются с формой.
Вот распространенный способ обработки загруженного файла:
Есть несколько других методов и атрибутов, доступных для объектов UploadedFile; полный справочник см. в разделе UploadedFile.
Обработка загруженных файлов с моделью¶
Если вы сохраняете файл в модели с помощью FileField , использование ModelForm значительно упрощает этот процесс. Файловый объект будет сохранен в месте, указанном аргументом upload_to соответствующего FileField при вызове form.save() :
Если вы создаете объект вручную, вы можете просто присвоить файловый объект из request.FILES полю файла в модели:
Загрузка нескольких файлов¶
Если вы хотите загрузить несколько файлов, используя одно поле формы, установите множественный HTML-атрибут виджета поля:
Затем переопределите метод post вашего подкласса FormView для обработки нескольких загрузок файлов:
Обработчики загрузки¶
Когда пользователь загружает файл, Django передает данные файла обработчику загрузки — небольшому классу, который обрабатывает данные файла по мере его загрузки. Обработчики загрузки изначально определены в параметре FILE_UPLOAD_HANDLERS, который по умолчанию имеет значение:
Вместе MemoryFileUploadHandler и TemporaryFileUploadHandler обеспечивают стандартное поведение Django при загрузке файлов: небольшие файлы считываются в память, а большие — на диск.
Вы можете написать собственные обработчики, которые настраивают, как Django обрабатывает файлы. Например, вы можете использовать настраиваемые обработчики для принудительного применения квот на уровне пользователя, сжатия данных «на лету», отображения индикаторов выполнения и даже отправки данных в другое место хранения напрямую, без их локального хранения. Подробнее о том, как можно настроить или полностью заменить поведение загрузки, см. в Écriture de gestionnaires de téléversement personnalisés.
Где хранятся загруженные данные¶
Прежде чем сохранять загруженные файлы, необходимо где-то сохранить данные.
По умолчанию, если загруженный файл меньше 2,5 мегабайт, Django сохранит все содержимое загрузки в памяти. Это означает, что при сохранении файла требуется только чтение из памяти и запись на диск, что очень быстро.
Однако, если загруженный файл слишком велик, Django запишет загруженный файл во временный файл, хранящийся во временном каталоге вашей системы. На Unix-подобной платформе это означает, что вы можете ожидать, что Django сгенерирует файл с именем что-то вроде /tmp/tmpzfp6I6.upload . Если загрузка достаточно большая, вы можете наблюдать, как этот файл увеличивается в размерах по мере того, как Django передает данные на диск.
Изменение поведения обработчика загрузки¶
Есть несколько настроек, которые управляют поведением Django при загрузке файлов. Подробнее см. в разделе Настройки загрузки файлов.
Изменение обработчиков загрузки на лету¶
Иногда определенные представления требуют другого режима загрузки. В этих случаях вы можете переопределить обработчики загрузки для каждого запроса, изменив request.upload_handlers. По умолчанию этот список будет содержать обработчики загрузки, заданные FILE_UPLOAD_HANDLERS , но вы можете изменить этот список так же, как и любой другой список.
Например, предположим, что вы написали ProgressBarUploadHandler, который предоставляет информацию о ходе загрузки в какой-либо виджет AJAX. Вы бы добавили этот обработчик в свои обработчики загрузки следующим образом:
Возможно, в этом случае вы захотите использовать list.insert() (вместо append() ), потому что обработчик индикатора выполнения должен запускаться перед любыми другими обработчиками. Помните, что обработчики загрузки обрабатываются по порядку.
Если вы хотите полностью заменить обработчики загрузки, вы можете просто назначить новый список:
Вы можете изменять обработчики загрузки только до доступа к request.POST или request.FILES. Нет смысла изменять обработчики загрузки после того, как обработка загрузки уже началась. Если вы попытаетесь изменить request.upload_handlers после чтения из request.POST или request.FILES, Django выдаст ошибку.
Поэтому всегда следует изменять обработчики загрузки как можно раньше в своем представлении.
Если ваша компания внедрила pyexcel и его компоненты в продукт, приносящий доход, поддержите меня на сайте patreon, чтобы поддерживать проект и развивать его дальше.
Если вы частное лицо, вы также можете поддержать меня на patreon и так долго, как считаете нужным. Как патреон, вы получите ранний доступ к содержимому, связанному с pyexcel.
И ваши проблемы будут иметь приоритет, если вы захотите стать моим патреоном как пользователь pyexcel pro.
Благодаря вашей финансовой поддержке я смогу потратить немного больше времени на кодирование, документацию и написание интересных постов.
Известные ограничения
Шрифты, цвета и диаграммы не поддерживаются.
Введение
Вот типичный разговор между разработчиком и пользователем:
Идея возникла из-за распространенной проблемы удобства использования: когда веб-приложение на основе файла Excel предоставляется пользователям, не являющимся разработчиками (например, помощнику команды, администратору отдела кадров и т. д.). Дело в том, что не все знают (или заботятся) о различиях между различными форматами excel: csv, xls, xlsx для них все равно. Вместо того, чтобы обучать этих пользователей форматам файлов, эта библиотека помогает веб-разработчикам работать с большинством форматов файлов Excel, предоставляя общий программный интерфейс. Чтобы добавить определенный тип формата файла Excel в свое приложение, все, что вам нужно, это установить дополнительный плагин pyexcel. Следовательно, код вашего приложения не меняется, и больше нет проблем с форматами файлов Excel. Судя по сообществу, эта библиотека и связанные с ней библиотеки пытаются стать небольшой и простой в установке альтернативой Pandas.
- импорт данных Excel в базы данных и экспорт из них
- превратить загруженный файл Excel непосредственно в структуру данных Python
- передать структуры данных Python в виде загружаемого файла Excel
- обеспечить сохранение данных в виде файла Excel на стороне сервера
- поддерживает csv, tsv, csvz, tsvz по умолчанию, а другие форматы поддерживаются с помощью следующих подключаемых модулей:
Для управления списком установленных подключаемых модулей необходимо использовать pip для добавления или удаления подключаемого модуля. Когда вы используете virtualenv, у вас могут быть разные плагины для каждой виртуальной среды. В ситуации, когда у вас есть несколько плагинов, которые делают одно и то же в вашей среде, вам нужно указать pyexcel, какой плагин использовать для каждого вызова функции. Например, pyexcel-ods и pyexcel-odsr, и вы хотите, чтобы get_array использовал pyexcel-odsr. Вам нужно добавить get_array(…, library=’pyexcel-odsr’).
Эта библиотека делает обработку информации, включающей различные файлы Excel, такой же простой, как обработка массива, словарь при обработке загрузки/выгрузки файлов, импорт данных в базы данных SQL и экспорт из них, анализ и сохранение информации. Он использует pyexcel и его плагины:
В этом руководстве вы узнаете, как экспортировать электронные таблицы Excel с помощью Django. Вы узнаете, как выполнять операции чтения-записи на листах Excel. Стилизация электронной таблицы Excel с помощью библиотеки XLWT. И запись в существующую книгу Excel с помощью XLWT.
Из этого руководства вы узнаете, как экспортировать в Excel, экспортировать в Excel, скачивать файл Excel с помощью django, обучать по django-excel, экспортировать данные в Excel, создавать файл Excel, генерировать файл Excel. Из этого урока вы узнаете, как –
Экспорт данных в Excel — очень распространенная задача для многих веб-приложений. Мы можем экспортировать данные из базы данных в электронную таблицу Excel. Python использует встроенную библиотеку CSV, что упрощает экспорт файлов CSV. Но для экспорта таблицы Excel мы будем использовать библиотеку XLWT. Это библиотека для создания файлов электронных таблиц, совместимых с версиями Microsoft Excel с 95 по 2019.
- Простая операция записи в Excel
- Стили листа Excel с помощью XLWT
- Запись в существующую книгу с помощью XLWT, XLRD, XLUTILS
Установка необходимых библиотек для экспорта Django в Excel:
Быстрая настройка приложения Django для экспорта Django в Excel
Откройте файл settings.py и добавьте имя приложения, которое мы создали, с именем excel_app
Создать представление для отображения всего HTML-кода
Примечание: если вы запустите указанный выше файл, он выдаст ошибку, поскольку мы не создали URL-адреса. Мы собираемся создать эти URL-адреса ниже в коде операции чтения/записи.
Создайте файл с именем urls.py в папке excel_app и код. Обратите внимание, что здесь можно создать URL-адреса этих приложений.
Прежде чем начать, изучите код библиотеки XLWT.
Объяснение кода библиотеки Python XLWT
- HttpResponse(content_type='application/ms-excel') — указывает браузерам, что документ представляет собой файл MS-EXCEL, а не файл HTML.
- response['Content-Disposition'] = 'вложение; filename="users.xls"' – содержит имя файла CSV и загружает файлы с этим именем.
- wb = xlwt.Workbook(encoding='utf-8') — создание рабочей книги в кодировке utf-8
- ws = wb.add_sheet('Данные пользователей') — создание листа с именем «Данные пользователей», и все данные будут записаны внутри этого листа.
- wb.save(response) — сохраненная книга и файл Excel будут загружены автоматически.
Экспорт Django QuerySet в электронную таблицу Excel
Код экспортирует данные модели пользователя, такие как имя пользователя, фамилия, адрес электронной почты, в таблицу Excel.
Экспорт файла XLS с использованием библиотеки XLWT со стилем
Код объяснит, как оформить файл Excel. В приведенном ниже коде поясняется перенос текста в ячейку, цвет фона, границы и цвет текста.
Запись в существующую книгу Excel с помощью XLWT
В приведенном ниже коде объясняется, как записывать данные в существующий файл Excel и содержимое внутри него.
Читайте также: