[django]数据导出excel升级强化版(很强大!)

不多说了,原理采用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‘),
时间: 2024-10-28 09:20:27

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

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

好多人在问:如何将百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里? 现在,很多人都在网络上找商家,联系业务. 百度地图里有很多的商家联系方式地址等数据,这便成为很多人的便捷方式.但是一个个地复制出来商家的电话,地址是一件很痛苦的事情, 于是想到开发一个程序,模拟人的操作,将所有的数据提取保存到EXCEL里. 交流学习QQ:3125547039 主要代码思路: m_objConnection.Open();             b

项目中生成器应用,解决量级数据导出excel内存溢出

应用场景:全量数据导出excel 遇到问题: PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 41007872 bytes) 很明显是内存溢出. 网上给出了很多治标不治本的解决方案: 1.直接修改PHP.INImemory_limit = xxxx M ;2.修改.htaccessphp_value memory_limit xxx M3.直接在程序页面上修改.ini_set(

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

原文:C#_.NetCore_WebAPI项目_EXCEL数据导出(ExcelHelper_第二版_优化逻辑) 项目需要引用NPOI的Nuget包:DotNetCore.NPOI-v1.2.2 本篇文章是对WebAPI项目使用NPOI操作Excel时的帮助类:ExcelHelper的改进优化做下记录: 备注:下面的帮助类代码使用的文件格式为:xlsx文件,xlsx相对xls的优缺点代码里有注释,推荐使用xlsx文件保存数据! using Microsoft.AspNetCore.Mvc; usi

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

npoi实现数据导出Excel

npoi .NET第三方的Office功能组件. 链接地址 http://npoi.codeplex.com/ 引用命名空间 using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using NPOI.SS.UserModel; 功能代码 /// <summary> /// 操作EXCEL导出数据报表的类 /// </summary> public class DataToExcel { /

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

在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF .所以今天我们来简单看一下利用Apache  POI实现数据库中数据导出excel报表.在java中有很多实现数据导出excel报表的第三方jar包.但在比较了一下感觉还是POI相对来

大量数据导出excel(csv)的实现

<?php /** * 大量数据导出excel(csv)的实现. * Created by PhpStorm. * User: Huming * Date: 2017-04-16 * Time: 14:04 * */ //使用MS sqlserver数据测试的 require_once 'MSSqlServerHelper.php'; $sqlHelper = new MSSqlServerHelper(); set_time_limit(0); ini_set('memory_limit',

.net解决数据导出excel时的格式问题

在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式. 下面简单介绍一下以上问题的解决方法: 1.首先,了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读 取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果 c

C#将网页数据导出Excel时编码设置

1 public void DGToExcel() 2 { 3 Response.ClearContent(); 4 Response.Charset = "GB2312";//内容编码 5 Response.ContentType = "application/ms-excel"; 6 Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//内容编码 7 R