由于目前的资料多是使用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(只读) |
xlrd, xlwt |
同上 |
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/
0