python通过xlwt模块直接在网页上生成excel文件并下载

时间:2023-12-05 19:10:20

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);
}