zoukankan      html  css  js  c++  java
  • python通过xlwt模块直接在网页上生成excel文件并下载

    urls:

    from django.conf.urls import url, include
    from . import views
    
    urlpatterns = [
    ...
        url(r'^domains/_export_dns.html', views.export_dns, name='export_dns'),
    ...
    ]

    view:

    import xlrd, xlwt
    
    def set_style(name, height, bold=False):
        """
        excel样式
        :param name: 字体名
        :param height: 调度
        :param bold: 边框
        :return:
        """
        style = xlwt.XFStyle()  # 初始化样式
        font = xlwt.Font()  # 为样式创建字体
        font.name = name  # 'Times New Roman'
        font.bold = bold
        font.color_index = 000
        font.height = height
        style.font = font
    
        # 设置单元格边框
        # borders= xlwt.Borders()
        # borders.left= 6
        # borders.right= 6
        # borders.top= 6
        # borders.bottom= 6
        # style.borders = borders
    
        # 设置单元格背景颜色
        # pattern = xlwt.Pattern()
        # 设置其模式为实型
        # pattern.pattern = pattern.SOLID_PATTERN
        # 设置单元格背景颜色
        # pattern.pattern_fore_colour = 0x00
        # style.pattern = pattern
    
        return style
    
    @login_required
    def export_dns(req):
        """
        导出DNS解析记录
        :param req:
        :return:
        """
    
        if req.method == 'GET':
            data = req.GET.get('data')
            data = json.loads(data)
    
            zone_tag_obj = models.ZoneTag.objects.get(zone_name=data['zone'])
            record_obj_list = zone_tag_obj.ZoneTag_Record.filter( ~Q(type='SOA') )
    
            response = HttpResponse(content_type='application/ms-excel')
            response['Content-Disposition'] = 'attachment; filename="%s.xls"' %(data['zone'])
    
            book = xlwt.Workbook(encoding='utf-8')
            sheet = book.add_sheet('Sheet1', cell_overwrite_ok=True)
            row0 = ['主机记录', '记录类型', '解析线路', '记录值', 'MX优先级', 'TTL', '状态', '备注']
            # 设置列宽
            sheet.col(0).width = 6000
            sheet.col(1).width = 3000
            sheet.col(2).width = 3000
            sheet.col(3).width = 6000
            sheet.col(4).width = 3000
            sheet.col(5).width = 3000
            sheet.col(6).width = 3000
            sheet.col(7).width = 12000
            for i in range(0, len(row0)):
                sheet.write_merge(0, 0, i, i, row0[i], set_style('Times New Roman', 220, True))
    
            for k, v in enumerate(record_obj_list, start=1):
                sheet.write(k, 0, v.host)
                sheet.write(k, 1, v.type )
                sheet.write(k, 2, v.resolution_line )
                sheet.write(k, 3, v.data )
                sheet.write(k, 4, v.mx_priority )
                sheet.write(k, 5, v.ttl)
                sheet.write(k, 6, v.status)
                sheet.write(k, 7, v.comment )
    
            book.save(response)
    
            return response
        elif req.method == 'POST':
            msg = {'status': 200}
            return HttpResponse(json.dumps(msg))

    js:

    function ExportDnsRecordACK(){
        // 确认导出DNS解析记录
        var _export_dns_record_type = $("select[name=export_dns_record_type]")[0].value.trim();
        var _zone = $("#ExportDnsRecordModalLabel h4").attr('domain')
        var __data = {'data': _export_dns_record_type, 'zone':_zone}
    
        var url = "/domains/_export_dns.html?data=" + JSON.stringify(__data);
    
        $.ajax({
            url: "/domains/_export_dns.html",
            type: "POST",        //请求类型
            data: {},
            //async : false,
            dataType: "json",
            //beforeSend:function(XMLHttpRequest){
            //    // 请求前执行
            //},
            success: function (response, status, request) {
                //当向服务端发起的请求执行成功完成后,自动调用
                if(request['status'] == 200){
                    $('#ExportDnsRecordModalLabel').modal('hide');
                    window.location.href = url;     //下载文件
                }
            },
            error: function () {
                //当请求错误之后,自动调用
            }
        });
    }
    
    
    $(document).ready(function(){
        // 确认 导出DNS解析记录
        $(document).on("click", 'button[name=_export_dns_record_ok]', ExportDnsRecordACK);
    }
  • 相关阅读:
    教你如何开发一个完败Miracast的投屏新功能
    深度评测--安卓免费的银行卡识别SDK,华为 HMS MLKit 和Card IO哪个好?
    别让算法和数据结构拖你职业生涯的后腿
    接入卡片类快服务你必须知道的事情
    手机智眼——智慧视觉
    解放双手的革命——智慧语音
    Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍
    快服务常见TOP3审核雷区,再不过审就要崩溃啦!
    图标新纪元——服务直达
    集成机器学习服务上架华为应用市场指南
  • 原文地址:https://www.cnblogs.com/linkenpark/p/9623566.html
Copyright © 2011-2022 走看看