[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'),

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM