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

  pyexcel-xlsx需另外单独安装。否则在下载时会报:OSError: No content, file name. Nothing is given的错误。

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

 import django_excel as excel

 def download_excel(request):

     data_excel =django_test_1.objects.all()

     column_names = ["abc"]

     return excel.make_response_from_query_sets(data_excel,column_names, "xlsx",status = 200 ,sheet_name='测试',file_name='测试文件')

这是Xsan自己编写的函数,将pandas中的dataframe数据转换成django-excel中的sheet参数

 # 将dataform转换成django-excel下载是的sheet
def dataframe_to_down_excel_data(dataframe, row_name=None):
'''
dataframe:需要生成Excel的数据,dataframe类型
row_name:自定义Excel列名,默认是dataframe的列名
'''
table_data_dataframe_index = list(dataframe.index)
row_list = []
for i in table_data_dataframe_index:
tmp = dataframe.loc[i, :]
row_list.append(tmp)
if row_name == None:
row_name = list(dataframe.columns)
sheet = [row_name]
for i in row_list:
sheet.append(i)
return sheet

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

django下载excel,使用django-excel插件的更多相关文章

  1. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  2. 文件上传与下载,PDF与Excel的操作

    1.文件上传 前端代码 <el-upload class="upload-demo" ref="upload" :action="actionU ...

  3. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  4. day56——http协议、MVC和MTV框架模式、django下载安装、url路由分发

    day56 昨日复习 今日内容 HTTP协议 网页:https://www.cnblogs.com/clschao/articles/9230431.html 老师整理的重点 老师整理的重点 请求信息 ...

  5. HTTP协议 django下载安装 url路由分发

    今日内容 HTTP协议 MVC和MTV框架模式 django下载安装 django的url路由分发 HTTP协议 http协议 请求信息格式 GET / HTTP/1.1 请求行 Host: 127. ...

  6. tp5.0 composer下载phpexcel 实现导出excel 表格

    tp5.0 composer下载phpexcel 实现导出excel 表格 1.在下载好的tp5.0 框架里面使用 composer 下载phpexcel 的插件 composer require p ...

  7. Django下载中文名文件:

    Django下载中文名文件: from django.utils.http import urlquote from django.http import HttpResponse content = ...

  8. Python学习笔记22:Django下载并安装

    Django它是一个开源Web应用程序框架.由Python书面. 通过MVC软件设计模式,这种模式M,视图V和控制器C. 它最初是一个数字新闻内容为主的网站已经发展到管理劳伦斯出版集团.那是,CMS( ...

  9. django下载文件

    赶快记录一下写的一个django下载文件的例子,以便以后复习: 在views.py中设置 from django.core.servers.basehttp import FileWrapper im ...

随机推荐

  1. 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...

  2. jquery appaend元素中id绑定事件失效问题

    1. 在jquery中append元素,如果该元素中有id值并且绑定事件,那么该id事件会失效,必须刷新一下才能使用. 2.解决办法: 举例:如果在一个<div class="titl ...

  3. CSS流体(自适应)布局下宽度分离原则——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1463 一.简短的前言 ...

  4. tr,td高度不生效

    功能:表格内容较长,但是页面高度有限,超出显示滚动条 阻碍:给tr或者td加高度都不生效,不显示滚动条 解决方案:td中加div,设置高度和内容溢出时的样式 <table border='1' ...

  5. CSS预编译器:Sass(进阶),更快的前端开发

    1.@if     @if 指令是一个 SassScript,它可以根据条件来处理样式块,如果条件为 true 返回一个样式块,反之 false 返回另一个样式块 在 Sass 中除了 @if 之,还 ...

  6. 【java错误】错误: 编码GBK的不可映射字符

    java源代码 今天在写java是出现一个编码错误,这里先将书上的java源代码贴出来. import java.io.Console; public class ConsoleTest { //用j ...

  7. 【CVE-2018-11116】openwrt rpcd 配置文件错误导致访问控制失效

    User can access to ubus over HTTP. This way depend on rpcd service. When misconfigure the rpcd's ACL ...

  8. 润乾V4导出TXT时自定义分隔符

     ◆ 背景说明 报表中,导出text时,默认没有分隔符:应用中对导出Text,希望能自定义分隔符.在tag中定义了 textDataSeparator属性,让用户在导出Text时自定义分隔符,从而 ...

  9. Java反射机制动态代理

    1.什么事反射机制动态代理 在一段代码的前后动态执行其他操作,比如有一个方法是往数据库添加一个记录,我们可以通过动态代理,在操作数据库方法的前和后添加代码执行打开数据库连接和关闭数据库连接. 2.演示 ...

  10. Fragment 源码解析add()和replace()方法

    1.有问题的代码: MainActivity public class MainActivity extends AppCompatActivity implements View.OnClickLi ...