1. 环境

  Django (2.1.10) + Python3.6 + xlwt (1.3.0)

  操作系统使用的为:Windows 7

2. 接口代码

def now_export(request):
data_list = CIP.objects.all() # 获取数据的查询集
if not data_list:
return HttpResponse(json.dumps({"state": "", "msg": "查无数据,导出失败"}), content_type="application/json") ws = Workbook(encoding='utf-8') # 设置Excel为UTF-8的编码格式
w = ws.add_sheet(u"正在清洗的CIP报表") # 设置sheet名称
w.write(0, 0, "id")
w.write(0, 1, u"清洗线路")
w.write(0, 2, u"操作者")
w.write(0, 3, u"清洗目标")
w.write(0, 4, u"清洗类型")
w.write(0, 5, u"CIP状态")
w.write(0, 6, u"开始时间")
# 把需要导出的数据写到文件中
excel_row = 1
for obj in data_list:
w.write(excel_row, 0, excel_row)
w.write(excel_row, 1, obj.CIPNo)
w.write(excel_row, 2, obj.oper)
w.write(excel_row, 3, obj.ccid)
w.write(excel_row, 4, obj.mode)
w.write(excel_row, 5, "CIP程序启动")
w.write(excel_row, 6, datetime.strftime(obj.start_time, '%Y-%m-%d %H:%M:%S'))
excel_row += 1
sio = BytesIO() # 写出到IO
ws.save(sio)
sio.seek(0) # 重新定位到开始
response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel') # 设置文件格式为Excel
   # attachment(意味着消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename的值预填为下载后的文件名)
   response['Content-Disposition'] = 'attachment; filename=test.xls'
   response.write(sio.getvalue())
   return response

提示:若出现 TypeError: string argument expected, got 'bytes'  错误。问题出现在使用StringIO的write方法上,用BytesIO替代StringIO即可解决问题,笔者这里已经替换过了

3. 前端请求

注意:但需要注意的是,如果想要用这种方式下载文件,不能使用AJAX的方式,而是应该新建一个<a>标签,模拟点击下载。原因为处于安全性考虑,JavaScript无法与磁盘进行交互,因此AJAX得到的内容将被保留在内存中,而不是磁盘上。

3.1 请求方式为GET时:

  此时直接在A标签的href属性中指定路由即可

<a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" title="导出报表" href="/CIP/now_export/">导出报表</a>
3.2 请求方式为POST时:

  这种请求 需写一个form表单,把请求所需数据写在表单中,在A标签中指定表单的提交方法即可。(对于a标签实现post请求感兴趣的可以自行百度其他方法)

<a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" title="导出报表" onclick="document.getElementById('form').submit();">
导出报表</a>
<form action="/CIP/draft_export/" method="post" id="form" enctype="multipart/form-data">
<div class="row cl">
<div class="formControls col-xs-8 col-sm-9">
<label class="form-label col-xs-4 col-sm-2">开始日期:</label>
<input type="text" style="width: 200px" onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd',maxDate:'#F{$dp.$D(\'startdate\')||\'%y-%M-%d\'}'})"
id="startdate" class="input-text Wdate" name="startdate">
</div>
<div class="formControls col-xs-8 col-sm-9" style="width: 400px">
<label class="form-label col-xs-4 col-sm-2">结束日期:</label>
<input type="text" style="width: 200px" onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'enddate\')}' })"
id="enddate" class="input-text Wdate" name="enddate">
</div>
</div>
<br>
<div class="row cl">
<div class="formControls col-xs-8 col-sm-9">
<label class="form-label col-xs-4 col-sm-2">线路:</label>
<span class="select-box">
<select class="select" id="line" name="line">
<option>all</option>
</select>
</span>
</div>
<div class="formControls col-xs-8 col-sm-9">
<label class="form-label col-xs-4 col-sm-2">目标:</label>
<span class="select-box">
<select class="select" id="goal" name="goal">
<option>all</option>
</select>
</span>
</div>
<a name="" id="" class="btn btn-success" onclick="search_date(1)"><i class="Hui-iconfont" ></i> 搜索</a>
</div>
</form>

  

Django导出数据为Excel,调用浏览器下载的更多相关文章

  1. java web 读取数据库数据写入Excel返回浏览器下载

    @RequestMapping(value = "/download", method = RequestMethod.GET) public void downstudents( ...

  2. asp.net 通过 Handler 导出数据至excel (让用户下载)

    效果图: 代码: Export2Excel.ashx <%@ WebHandler Language="C#" CodeBehind="Export2Excel.a ...

  3. django导出数据到excel

    import xlwt,StringIodef dumpData(request): #获取数据 activitys = Activity.objects.all().order_by('id') i ...

  4. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  5. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中

    好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...

  6. phpexcel如何读取excel的数据和如何导出数据到excel

    phpexcel如何读取excel的数据和如何导出数据到excel 一.总结 一句话总结:去官网看参考手册和api,或者找中文的博客或者参考手册 1.phpexcel插件如何下载? 其实这些插件不仅可 ...

  7. ASP导出数据到excel遇到的一些问题

    一直用动易平台的ASP做新闻发布网站,直到现在才接触导出数据到Excel的问题,目的在于公司要统计各部门的投稿量,要做这么个东西,实现起来是挺简单的,但是第一次做,还是费了一些功夫的,特此记录一下 主 ...

  8. 手把手教你springboot中导出数据到excel中

    手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...

  9. Dynamics CRM导出数据到Excel

    原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...

随机推荐

  1. redis消息提醒设计方案细则

    ----需求明细: 现有多个角色,角色间需要交互,内容分为申请,审核通过,拒绝,解除合作.每个角色进入自己后台显示查看其他角色的未读消息个数,点击进入显示所有发送来的内容.最开始只存储未读个数,并不知 ...

  2. [bzoj 4872][六省联考2017]分手是祝愿

    传送门 Description N个灯按照1~N标号,按下一个开关i,所有标号是i的约数的开关都改变状态,目标是关掉所有的灯,如果当前最优策略≤k就直接按照最优策略走.否则随机按下一个开关.给出每个灯 ...

  3. 【HDU4622】Reincarnation

    [HDU4622]Reincarnation 一眼似乎不可做,但发现\(strlen(x)\)很小,暴力\(O(n^2)\)预处理每个区间\((l,r)\),查询时\(O(1)\)输出就好了 #inc ...

  4. Hadoop hadoop(2.9.0)---uber模式(小作业“ubertask”优化)

    前言: 在有些情况下,运行于Hadoop集群上的一些mapreduce作业本身的数据量并不是很大,如果此时的任务分片很多,那么为每个map任务或者reduce任务频繁创建Container,势必会增加 ...

  5. Arts打卡第8周

    Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...

  6. Co-Clustering_Reproducing

    调包一时爽,复现马上躺. Co-Clustering 注意右上角的:"Edit on GitHub",一开始疯狂吐槽没有源码,复现得非常难受,今天刚做完GM05中Algotirhm ...

  7. Web安全测试 — 手工安全测试方法&修改建议

    常见问题 1.XSS(CrossSite Script)跨站脚本攻击 XSS(CrossSite Script)跨站脚本攻击.它指的是恶意攻击者往Web 页面里插入恶意 html代码,当用户浏览该页之 ...

  8. Flutter移动电商实战 --(46)详细页_自定义TabBar Widget

    主要实现详情和评论的tab provide定义变量 自己做一个tab然后用provide去控制 定义两个变量来判断是左侧选中了还是右侧选中了.并定义一个方法来接受参数,修改是左侧还是右侧选中的状态值 ...

  9. Cookie的使用(js-cookie插件)

    js-cookie 官方文档 里面就详细的介绍了es5怎么引用,以下是ES6以上的用户 一.安装 npm install js-cookie --save 二.引用 import Cookies fr ...

  10. 【分类算法】感知机(Perceptron)

    0 - 算法描述 感知机算法是一类二分类算法,其问题描述为,给定一个训练数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 其中$x_i\in \m ...