不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据

之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条件导出的功能了.

先上图:

再说明:核心是使用django视图中的命名组,例如配置url(r'^perm=(?P<a>\w+)$', 'keywork.views.work)

那么,我可以访问网址/perm=参数值,这类的参数值就是我们的条件了,最后在javascript中编写一个click函数弹出对应的链接即可

后代码:

模板中HTML代码:

       <div class="tab-pane" id="data_export"><!-- 标签页--4--数据导出 -->
<h4>导出条件选项</h4>
<form class="form-inline">
<label>年月</label>
<select class='input-small' placeholder='.input-small' id='ny'>
<option value="all" selected="selected">全选</option>
{%for a in monthid%}
<option value="{{a.day_id}}">{{a.day_id}}</option>
{%endfor%}
</select>
<label>支局</label>
<select class='input-small' placeholder='.input-small' id='zj'>
<option value="all" selected="selected">全选</option>
{% for b in mkt_chnl %}
<option value="{{b.mkt_chnl_id}}">{{b.mkt_chnl_name}}</option>
{%endfor%}
</select>
<label>产品名称</label>
<select class='input-small' placeholder='.input-small' id='cpmc'>
<option value="all" selected="selected">全选</option>
{% for c in prod_id %}
<option value="{{c.product_id}}">
{% if c.product_id == "101010001" %}
座机
{% elif c.product_id == "102030001" %}
宽带
{% elif c.product_id == "208511296" %}
手机
{% elif c.product_id == "208511177" %}
电视
{% elif c.product_id == "150000065" %}
itv副机
{% endif %}
</option>
{%endfor%}
</select>
<label>用户类型</label>
<select class='input-small' placeholder='.input-small' id='yhlx'>
<option value="all" selected="selected">全选</option>
{% for u in usertype %}
<option value="{{u.user_flag}}">
{% if u.user_flag == "1" %}
新增用户
{% elif u.user_flag == "2" %}
拆机用户
{% elif u.user_flag == "4" %}
礼包用户
{% elif u.user_flag == "5" %}
3G转4G
{% elif u.user_flag == "6" %}
流量包
{% endif %}
</option>
{%endfor%}
</select>
<input type="button" id="sclj" value="生成链接" class="btn btn-primary btn-sm"/>
</form>
<dl>
<dt>导出数据模块操作说明:</dt>
<dd>请先选择导出条件,然后点击生成链接,最后在下方点击链接下载对应的用户清单数据</dd>
</dl>
<dl>
<dt>链接生成处:</dt>
<dd><a href="#" id="work_backup">空白链接</a>
</dd>
</dl>
</div>

模板中JQUERY代码:

$('#sclj').click(function(){//数据导出链接
tj1 = $("#ny").val();tj2 = $("#zj").val();tj3 = $("#cpmc").val();tj4 = $("#yhlx").val();
$('#work_backup').attr('href','backup-'+tj1+'-'+tj2+'-'+tj3+'-'+tj4);
$('#work_backup').text('backup-'+tj1+'-'+tj2+'-'+tj3+'-'+tj4);
});

view中代码:

def work_backup(request,a,b,c,d):
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=beifen'+time.strftime('%Y%m%d',time.localtime(time.time()))+'.xls'
workbook = xlwt.Workbook(encoding='utf-8') #创建工作簿
sheet = workbook.add_sheet("sheet1") #创建工作页
row0 = [u'用户标识',u'设备状态',u'用户号码',u'用户姓名',u'账户编码',
u'产品ID',u'支局名称',u'支局ID',u'区域名称',u'区域ID',
u'网格名称',u'销售人员名称',u'销售点名称',u'号码竣工时间',u'号码拆机时间',
u'用户类型',u'产品其他标识',u'服务提供ID',u'服务提供名称',u'CRM竣工时间',
u'CRM受理员工',u'CRM受理工号',u'受理点',u'销售贫名称',u'统计时间'
]
for i in range(0,len(row0)):
sheet.write(0,i,row0[i])
if a == "all":
a =""
if b == "all":
b =""
if c == "all":
c =""
if d == "all":
d =""
data = DevData.objects.filter(Q(day_id__contains=a) & Q(mkt_chnl_id__contains=b) & Q(product_id__contains=c) & Q(user_flag__contains=d)).values()
num = 1
for d in data:
sheet.write(num,0,d['serv_id'])
sheet.write(num,1,d['serv_state_name'])
sheet.write(num,2,d['acc_nbr'])
sheet.write(num,3,d['user_name'])
sheet.write(num,4,d['acct_code'])
sheet.write(num,5,d['product_id'])
sheet.write(num,6,d['mkt_chnl_name'])
sheet.write(num,7,d['mkt_chnl_id'])
sheet.write(num,8,d['mkt_region_name'])
sheet.write(num,9,d['mkt_region_id'])
sheet.write(num,10,d['mkt_grid_name'])
sheet.write(num,11,d['sale_man'])
sheet.write(num,12,d['sale_outlets_cd1_name'])
sheet.write(num,13,d['completed_time'])
sheet.write(num,14,d['remove_data'])
sheet.write(num,15,d['user_flag'])
sheet.write(num,16,d['pro_flag'])
sheet.write(num,17,d['service_offer_id'])
sheet.write(num,18,d['service_offer_name'])
sheet.write(num,19,d['finish_time'])
sheet.write(num,20,d['staff_name'])
sheet.write(num,21,d['staff_code'])
sheet.write(num,22,d['org_name'])
sheet.write(num,23,d['prod_offer_name'])
sheet.write(num,24,d['day_id'])
num = num + 1
workbook.save(response)
return response

url中代码:

url(r'^backup-(?P<a>\w+)-(?P<b>\w+)-(?P<c>\w+)-(?P<d>\w+)$', 'keywork.views.work_backup'),

[django]数据导出excel升级强化版(很强大!)的更多相关文章

  1. 百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里?

    好多人在问:如何将百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里? 现在,很多人都在网络上找商家,联系业务. 百度地图里有很多的商家联系 ...

  2. 【asp.net】将GridView数据导出Excel

    概要: 中午睡了一会,醒来的时候看到老师叫我去办公室,需求是这样的,把excel表中的每个同学,判断图片目录中是否有对应的照片(图片的名字用的学号或身份证号码) 没有对应图片的学生记录,存入自己的数据 ...

  3. Java使用POI实现数据导出excel报表

    Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...

  4. JavaScript 上万条数据 导出Excel文件(改装版)

    最近项目要js实现将数据导出excel文件,网上很多插件实现~~那个开心呀,谁知道后面数据量达到上万条时出问题:浏览器不仅卡死,导出的excel文件一直提示网络失败.... debug调试发现var  ...

  5. JavaScript 上万条数据 导出Excel文件 页面卡死

    最近项目要js实现将数据导出excel文件,网上很多插件实现~~那个开心呀,谁知道后面数据量达到上万条时出问题:浏览器不仅卡死,导出的excel文件一直提示网络失败.... debug调试发现var  ...

  6. 将页面中表格数据导出excel格式的文件(vue)

    近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...

  7. C#_.NetCore_WebAPI项目_EXCEL数据导出(ExcelHelper_第二版_优化逻辑)

    项目需要引用NPOI的Nuget包:DotNetCore.NPOI-v1.2.2 本篇文章是对WebAPI项目使用NPOI操作Excel时的帮助类:ExcelHelper的改进优化做下记录: 备注:下 ...

  8. ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)

    转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...

  9. ASP.Net MVC中数据库数据导出Excel,供HTTP下载

    本文来自:http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于 ...

随机推荐

  1. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  2. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  3. 【.net 深呼吸】启动一个进程并实时获取状态信息

    地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...

  4. Android Ormlite 学习笔记2 -- 主外键关系

    以上一篇为例子,进行主外键的查询 定义Users.java 和 Role.java Users -- Role 关系为:1对1 即父表关系 Role -- Users 关系为:1对多 即子表关系 下面 ...

  5. JavaScript模仿块级作用域

    avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...

  6. H3 BPM引擎API接口

    引擎API接口通过 Engine 对象进行访问,这个是唯一入口. 示例1:获取组织机构对象 this.Engine.Organization.GetUnit("组织ID"); 示例 ...

  7. 编译器开发系列--Ocelot语言7.中间代码

    Ocelot的中间代码是仿照国外编译器相关图书Modern Compiler Implementation 中所使用的名为Tree 的中间代码设计的.顾名思义,Tree 是一种树形结构,其特征是简单, ...

  8. git命令行操作

    从本地上传代码到仓库(假设已经建好仓库): 1.初始化: git init 2.将所有文件加入缓存区: git add * 3.提交当前工作空间的修改内容: git commit -m 'commit ...

  9. Linux实战教学笔记04:Linux命令基础

    第四节:Linux命令基础 标签(空格分隔):Linux实战教学笔记 第1章 认识操作环境 root:当前登陆的用户名 @分隔符 chensiqi:主机名 -:当前路径位置 用户的提示符 1.1 Li ...

  10. Linux监控工具介绍系列——OSWatcher Black Box

      OSWatcher Balck Box简介 OSWatcher Black Box (oswbb)是Oracle开发.提供的一个小巧,但是实用.强大的系统工具,它可以用来抓取操作系统的性能指标,用 ...