django下载excel,使用djan

发布时间:2019-03-14 23:50:17编辑:auto阅读(2472)

    django下载Excel,使用django-excel插件

      由于目前的资料多是使用pandas或xlwt库实现的。其实没有那么的麻烦,因为django有相对应的插件django-excel。

      该插件是依赖于pyexcel库写的。不过,不用专门安装pyexcel库,因为在安装django-excel时会自动将pyexcel装上。由于pyexcel是一个大库,且在使用django-excel时不用考虑pyexcel的使用方法,所以就不再此介绍太多了。在此,还是要多说一句,pyexcel的功能也是很强大的,可以实现数据的可视化,目前已开发出了与flask、django等web框架的对应插件,比如今天介绍的django-excel。

      django-excel是一款支持上传和下载excel文件的插件,并可以将excel文件以网页的形式展现出来,也可以将数据存入数据库。由于,笔者也是刚接触该插件,而且开发需求目前仅为下载功能,所以本篇只介绍其下载的功能。(注:实现下载功能,部署的服务器无需安装office)

    1、 安装

      pip install django-excel

      安装时会自动安装pyexcel-io、pyexcel、pyexcel-webio

    2、 支持django的版本

      目前已支持到django2.1.1版本。所以,使用目前django最新版的开发者也不用担心了,因为它支持。

    3、 实现下载

      该插件支持的数据格式很多,array(二维数组)、字典、数据库的表(单张或多张)、django的ORM查询结果(query sqt)等等。可以生成的文件类型:csv、tsv、csvz、tsvz、xls、xlsx、xlsm、ods。

    包名

    支持的文件格式

    依赖

    Python版本

    pyexcel-io

    csv, csvz , tsv, tsvz 

     

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

    pyexcel-xls

    xls, xlsx(只读), xlsm(只读)

    xlrdxlwt

    同上

    pyexcel-xlsx

    xlsx

    openpyxl

    同上

    pyexcel-ods3

    ods

    pyexcel-ezodf, lxml

    2.6, 2.7, 3.3, 3.4 3.5, 3.6

    pyexcel-ods

    ods

    odfpy

    同上

     

     

     

     

     

     

     

     

     

    上表是生成对应文件格式所需安装的包。

      如果是要使用二维数组生成excel文件,则需return django_excel.make_response_from_array(二维数组名, 生成的文件类型, status=200)。二维数组每一行代表Excel中相应的行。

      如果想要使用字典生成excel文件,则需return django_excel.make_response_from_dict(字典名, 文件类型, status=200)。键名为列名,键值为数据。

      如果想要使用数据库的表(单张)生成excel文件,则需return django_excel.make_response_from_a_table(表名, 文件类型, status=200)

      如果想要使用数据库的表(多张)生成excel文件,则需return django_excel.make_response_from_tables(表名列表, 文件类型status=200)

      如果想要使用查询集合生成excel文件,则需return django_excel.make_response_from_query_sets(查询集合名, 所需列对应字段(列表类型),文件类型, status=200)。所需列对应字段的列表里的顺序为Excel列名的顺序,且列表里的元素必须为model里的变量名。

      所有函数的通用参数包含file_name 和sheet_name,分别为文件名和Excel的工作薄名。

      注意,不论是数据库表还是查询集合,都不能包含外键否则会报错,而且只能通过页面的跳转实现下载,不能通过ajax请求,否则不会下载。

    eg:

    models.py

    class django_test_1(models.Model):
        abc = models.CharField(max_length=20,db_column='测试')

     

    views.py

    1 import django_excel as excel
    2 
    3 def download_excel(request):
    4 
    5     data_excel =django_test_1.objects.all()
    6 
    7     column_names = ["abc"]
    8 
    9     return excel.make_response_from_query_sets(data_excel,column_names, "xlsx",status = 200 ,sheet_name='测试',file_name='测试文件')

     

    以上仅为笔者目前的见解,没有写全。如果感兴趣可以直接阅读其官方文档:http://django.pyexcel.org/en/latest/

关键字