Skip to main content

A django middleware that provides one application programminginterface to read and write data in different excel file formats

Project description

https://raw.githubusercontent.com/pyexcel/pyexcel.github.io/master/images/patreon.png https://raw.githubusercontent.com/pyexcel/pyexcel-mobans/master/images/awesome-badge.svg https://codecov.io/gh/pyexcel-webwares/django-excel/branch/master/graph/badge.svg https://badge.fury.io/py/django-excel.svg https://pepy.tech/badge/django-excel/month https://img.shields.io/gitter/room/gitterHQ/gitter.svg https://img.shields.io/static/v1?label=continuous%20templating&message=%E6%A8%A1%E7%89%88%E6%9B%B4%E6%96%B0&color=blue&style=flat-square https://img.shields.io/static/v1?label=coding%20style&message=black&color=black&style=flat-square https://readthedocs.org/projects/django-excel/badge/?version=latest

Support the project

If your company uses pyexcel and its components in a revenue-generating product, please consider supporting the project on GitHub or Patreon. Your financial support will enable me to dedicate more time to coding, improving documentation, and creating engaging content.

Known constraints

Fonts, colors and charts are not supported.

Nor to read password protected xls, xlsx and ods files.

Introduction

Here is a typical conversation between the developer and the user:

     User: "I have uploaded an excel file"
           "but your application says un-supported file format"
Developer: "Did you upload an xlsx file or a csv file?"
     User: "Well, I am not sure. I saved the data using "
           "Microsoft Excel. Surely, it must be in an excel format."
Developer: "OK. Here is the thing. I were not told to support"
           "all available excel formats in day 1. Live with it"
           "or delay the project x number of days."

django-excel is based on pyexcel and makes it easy to consume/produce information stored in excel files over HTTP protocol as well as on file system. This library can turn the excel data into a list of lists, a list of records(dictionaries), dictionaries of lists. And vice versa. Hence it lets you focus on data in Django based web development, instead of file formats.

The idea behind pyexcel originated from a common usability problem: when Excel-driven web applications are delivered to non-developer users (e.g., project assistants, human resources administrators), they often are not aware of the differences between file formats such as CSV, XLS, and XLSX. Rather than training users on these formats, pyexcel provides web developers with a unified interface to handle most Excel file types.

To add support for a specific Excel format in your application, simply install an additional pyexcel plugin—no code changes required. This eliminates issues with different file formats. In the broader community, pyexcel and its associated libraries aim to be a simple, easy-to-install alternative to Pandas, where minimal data manipulation is needed.

The highlighted features are:

  1. excel data import into and export from databases

  2. turn uploaded excel file directly into Python data structure

  3. pass Python data structures as an excel file download

  4. provide data persistence as an excel file in server side

  5. supports csv, tsv, csvz, tsvz by default and other formats are supported via the following plugins:

A list of file formats supported by external plugins

Package name

Supported file formats

Dependencies

pyexcel-io

csv, csvz [1], tsv, tsvz [2]

csvz,tsvz readers depends on chardet

pyexcel-xls

xls, xlsx(read only), xlsm(read only)

xlrd, xlwt

pyexcel-xlsx

xlsx

openpyxl

pyexcel-ods3

ods

pyexcel-ezodf, lxml

pyexcel-ods

ods

odfpy

Dedicated file reader and writers

Package name

Supported file formats

Dependencies

pyexcel-xlsxw

xlsx(write only)

XlsxWriter

pyexcel-libxlsxw

xlsx(write only)

libxlsxwriter

pyexcel-xlsxr

xlsx(read only)

lxml

pyexcel-xlsbr

xlsb(read only)

pyxlsb

pyexcel-odsr

read only for ods, fods

lxml

pyexcel-odsw

write only for ods

loxun

pyexcel-htmlr

html(read only)

lxml,html5lib

pyexcel-pdfr

pdf(read only)

camelot

Plugin shopping guide

Since 2020, all pyexcel-io plugins have dropped the support for python versions which are lower than 3.6. If you want to use any of those Python versions, please use pyexcel-io and its plugins versions that are lower than 0.6.0.

Except csv files, xls, xlsx and ods files are a zip of a folder containing a lot of xml files

The dedicated readers for excel files can stream read

In order to manage the list of plugins installed, you need to use pip to add or remove a plugin. When you use virtualenv, you can have different plugins per virtual environment. In the situation where you have multiple plugins that does the same thing in your environment, you need to tell pyexcel which plugin to use per function call. For example, pyexcel-ods and pyexcel-odsr, and you want to get_array to use pyexcel-odsr. You need to append get_array(…, library=’pyexcel-odsr’).

Other data renderers

Package name

Supported file formats

Dependencies

Python versions

pyexcel-text

write only:rst, mediawiki, html, latex, grid, pipe, orgtbl, plain simple read only: ndjson r/w: json

tabulate

2.6, 2.7, 3.3, 3.4 3.5, 3.6, pypy

pyexcel-handsontable

handsontable in html

handsontable

same as above

pyexcel-pygal

svg chart

pygal

2.7, 3.3, 3.4, 3.5 3.6, pypy

pyexcel-sortable

sortable table in html

csvtotable

same as above

pyexcel-gantt

gantt chart in html

frappe-gantt

except pypy, same as above

Footnotes

This library makes information processing involving various excel files as easy as processing array, dictionary when processing file upload/download, data import into and export from SQL databases, information analysis and persistence. It uses pyexcel and its plugins:

  1. to provide one uniform programming interface to handle csv, tsv, xls, xlsx, xlsm and ods formats.

  2. to provide one-stop utility to import the data in uploaded file into a database and to export tables in a database as excel files for file download.

  3. to provide the same interface for information persistence at server side: saving a uploaded excel file to and loading a saved excel file from file system.

Tested Django Versions

https://img.shields.io/badge/django-3.1.2-green.svg https://img.shields.io/badge/django-2.1-green.svg https://img.shields.io/badge/django-2.0.8-green.svg https://img.shields.io/badge/django-1.11.15-green.svg https://img.shields.io/badge/django-1.10.8-green.svg https://img.shields.io/badge/django-1.9.13-green.svg https://img.shields.io/badge/django-1.8.18-green.svg

Installation

You can install django-excel via pip:

$ pip install django-excel

or clone it and install it:

$ git clone https://github.com/pyexcel-webwares/django-excel.git
$ cd django-excel
$ python setup.py install

Setup

You will need to update your settings.py:

FILE_UPLOAD_HANDLERS = ("django_excel.ExcelMemoryFileUploadHandler",
                        "django_excel.TemporaryExcelFileUploadHandler")

Usage

Here is the example viewing function codes:

from django.shortcuts import render_to_response
from django.http import HttpResponseBadRequest
from django import forms
from django.template import RequestContext
import django_excel as excel

class UploadFileForm(forms.Form):
    file = forms.FileField()

def upload(request):
    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            filehandle = request.FILES['file']
            return excel.make_response(filehandle.get_sheet(), "csv")
        else:
            return HttpResponseBadRequest()
    else:
        form = UploadFileForm()
    return render_to_response('upload_form.html',
                              {'form': form},
                              context_instance=RequestContext(request))

def download(request):
    sheet = excel.pe.Sheet([[1, 2],[3, 4]])
    return excel.make_response(sheet, "csv")

Development guide

Development steps for code changes

  1. git clone https://github.com/pyexcel/django-excel.git

  2. cd django-excel

Upgrade your setup tools and pip. They are needed for development and testing only:

  1. pip install –upgrade setuptools pip

Then install relevant development requirements:

  1. pip install -r rnd_requirements.txt # if such a file exists

  2. pip install -r requirements.txt

  3. pip install -r tests/requirements.txt

Once you have finished your changes, please provide test case(s), relevant documentation and update changelog.yml

How to test your contribution

Although nose and doctest are both used in code testing, it is advisable that unit tests are put in tests. doctest is incorporated only to make sure the code examples in documentation remain valid across different development releases.

On Linux/Unix systems, please launch your tests like this:

$ make

On Windows, please issue this command:

> test.bat

Before you commit

Please run:

$ make format

so as to beautify your code otherwise your build may fail your unit test.

License

New BSD License

5 contributors

In alphabetical order:

Change log

0.0.13 - 31.10.2025

Change:

  1. Replace pkg_resources-based Django version check with django.get_version()

  2. Exclude .venv from flake8 check to simplify development

0.0.12 - not released

Change:

  1. Support for django 2.0.x

  2. Tested against django 4.1

  3. Change xlrd version <=1.2.0

0.0.11 - not released

Updated

  1. Test Support for django 3.x.x

  2. Tested against django 3.x.x

0.0.10 - 11.01.2018

Added

  1. pyexcel-io#46, expose bulk_save to django developers

0.0.9 - 12.07.2017

Added

  1. bring isave_to_database and isave_book_to_database

0.0.8 - 07.07.2017

Added

  1. pyexcel#39, explicitly seeking at 0

0.0.7 - 29.06.2017

Added

  1. pyexcel#38, Support unicode code as download file name

0.0.6 - 12.22.2016

Updated

  1. pyexcel#26, raise ioerror if content is empty.

  2. Use pyexcel-webio v0.0.9 so as to push out new version of pyexcel and its plugins.

0.0.5 - 26.08.2016

Added:

  1. Support for django 1.6.x

  2. Tested against django 1.10

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_excel-0.0.13.tar.gz (505.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_excel-0.0.13-py2.py3-none-any.whl (15.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django_excel-0.0.13.tar.gz.

File metadata

  • Download URL: django_excel-0.0.13.tar.gz
  • Upload date:
  • Size: 505.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for django_excel-0.0.13.tar.gz
Algorithm Hash digest
SHA256 a90f48329d61982e0bdac34bac5da041fbd86444610602cd3479de760ad7d0ae
MD5 f9f8faff53736a426654fdb4e1782219
BLAKE2b-256 f9575588d9b1ea284fc63a390988782049c5e5f15e3ceb74f8c511a321e1ddb5

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_excel-0.0.13.tar.gz:

Publisher: pythonpublish.yml on pyexcel-webwares/django-excel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_excel-0.0.13-py2.py3-none-any.whl.

File metadata

  • Download URL: django_excel-0.0.13-py2.py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for django_excel-0.0.13-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6494129f7964c68df695fb39371f4219c3f51721c0eecbed66fedd55404b8a6f
MD5 28839fed62032737bac03f7b59bb7fee
BLAKE2b-256 bd994160d78404de888286358d6f18566e56ce9930996f7da559caff992d49e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_excel-0.0.13-py2.py3-none-any.whl:

Publisher: pythonpublish.yml on pyexcel-webwares/django-excel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page