import xlsxwriter
# 获取字符串长度,一个中文的长度为2
if __name__ == '__main__':
# 创建工作簿并添加工作表。
workbook = xlsxwriter.Workbook('Expenses01.xlsx') # 设置输出路径为当前目录下
worksheet = workbook.add_worksheet('sheet1')
merge_format = workbook.add_format({
'bold': True, # 字体加粗
'border': 1, # 单元格边框宽度
'align': 'center', # 水平居中
'valign': 'vcenter', # 垂直居中
})
merge_format2 = workbook.add_format({
'border': 1, # 单元格边框宽度
'align': 'center', # 水平居中
'valign': 'vcenter', # 垂直居中
})
# 下面是我们想要写入工作表的一些数据。
expenses = (
['时间', '自有', '自有', '自有', '曝光量', '曝光量', '曝光量', '曝光量', '点击量', '点击量', '点击量', '点击率', '点击率', '广点通-思擎收益维度',
'广点通-思擎收益维度', '广点通-思擎收益维度', '分成后的收益维度', '分成后的收益维度', '分成后的收益维度', '支出', '收益', '下载', '安装', '2K曝光安装数', '安装单价',
'安装转化率'],
['时间', '请求数', '请求成功', '填充率', '我的数据', '广点通-思擎数据', '曝光率', '曝光占比', '我的数据', '广点通-思擎数据', '点击占比', '我的数据', '广点通-思擎数据',
'收入', 'ecpm', 'cpc', '收入', 'ecpm', 'cpc', '支出', '收益', '下载', '安装', '2K曝光安装数', '安装单价', '安装转化率'],
['2019-12-01', 428149, 383159, 89.49, 370665, 471006, 96.74, 127.07, 76487, 88610, 115.85, 20.64, 18.81, 11852,
25.16, 0.13, 9481.6, 25.58, 0.12, 1667.9925, 7813.61, 0, 0, 0, 0, 0],
['2019-12-02', 389632, 351259, 90.15, 330347, 329097, 94.05, 99.62, 70559, 69023, 97.82, 21.36, 20.97, 10726.62,
32.59, 0.16, 8581.296, 25.98, 0.12, 1486.5615, 7094.73, 0, 0, 0, 0, 0],
)
# 从第一个单元格开始。行和列为零索引。
# 迭代数据并逐行写出。
for row in range(len(expenses)):
if row < 2:
for col in range(len(expenses[row])):
if expenses[row][col] == expenses[row - 1][col]:
'''
merge_range(first_row, first_col, last_row, last_col, data[, cell_format]) :合并elsx 表格数据 :第一行 ,第一列,最后一行,最后一列,数据
'''
worksheet.merge_range(row - 1, col, row, col, expenses[row][col], merge_format);
elif expenses[row][col] == expenses[row][col - 1]:
worksheet.merge_range(row, col - 1, row, col, expenses[row][col], merge_format);
else:
worksheet.write(row, col, expenses[row][col], merge_format)
else:
for col in range(len(expenses[row])):
worksheet.write(row, col, expenses[row][col], merge_format2)
worksheet.set_column(row, col, 15);
chart_col = workbook.add_chart({'type': 'line'}) # 新建图表格式 line为折线图
chart_col.add_series( # 给图表设置格式,填充内容
{
'name': '=sheet1!$G$2',
'categories': '=sheet1!$A$3:$A$12',
'values': '=sheet1!$G$3:$G$12',
'line': {'color': '#669CEE'},
}
)
chart_col.set_title({'name': '曝光率'})
chart_col.set_style(1)
worksheet.insert_chart('A17', chart_col, {'x_offset': 32, 'y_offset': 17}) # 放置图表位置
# 不要忘记关闭文件
workbook.close()
@csrf_exempt
def resources_excel(request):
from django.utils.http import urlquote
if request.method == 'GET':
pageSize = request.GET.get('pageSize')
startIndex = request.GET.get('startIndex')
pageSize = int(pageSize)
startIndex = int(startIndex)
astId = request.GET.get('astId')
aitId = request.GET.get('aitId')
actId = request.GET.get('actId')
resourcesAll = resources_by_list({'startIndex': startIndex, 'pageSize': pageSize,
'astId': astId, 'aitId': aitId, 'actId': actId})
header = ['图片地址', '点击地址', '展示类型', '交互类型', '标题', '描述']
data = resourcesAll['data'] #要写入的数据
book = xlwt.Workbook(encoding='utf-8', style_compression=0) # 创建一个Workbook对象,这就相当于创建了一个Excel文件
# # 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 设置表头
i = 0
for k in header:
sheet.write(0, i, k)
i = i + 1
# 数据写入excel
row = 1
for val in data:
sheet.write(row, 0, val['img_url']) # 第二行开始
sheet.write(row, 1, val['click_url']) # 第二行开始
sheet.write(row, 2, val['astName']) # 第二行开始
sheet.write(row, 3, val['aitName']) # 第二行开始
sheet.write(row, 4, val['title']) # 第二行开始
sheet.write(row, 5, val['description']) # 第二行开始
row = row + 1
# 最后,将以上操作保存到指定的Excel文件中,只能本地用
# time_stamp = datetime.datetime.now()
# ticks2 = time_stamp.strftime('%Y-%m-%d-%H.%M.%S')
# excel = "d:\excel"+ticks2+".xls"
# book.save('test.xls')
# book.save(excel)
# return HttpResponse(content_type="application/json")
# 写入浏览器
# 写出到IO
output = io.BytesIO()
book.save(output)
# 重新定位到开始
output.seek(0)
response = HttpResponse(output.getvalue(), content_type='application/vnd.ms-excel')
ctime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
file_name = '素材池信息%s.xls' % ctime # 给文件名中添加日期时间
file_name = urlquote(file_name) # 使用urlquote()方法解决中文无法使用的问题
response['Content-Disposition'] = 'attachment; filename=%s' % file_name
response.write(output.getvalue()) # 在设置HttpResponse的类型时,如果给了值,可以不写这句
return response
<a id="execl"><button type="button" id="export_btn" class="btn green bold" ><i class="glyphicon glyphicon-log-out"></i> excel导出</button></a>
//get请求 直接<a> 标签
function initExport(){
$("#export_btn").click(function () {
astId = $("#show_type").val();
if (astId == null){
astId ="";
}
aitId = $("#interaction_type").val();
if (aitId == null){
aitId ="";
}
actId = $("#creative_type").val();
if (actId == null){
actId ="";
}
startIndex = (currentPage - 1) * pageSize;
pageSize = pageSize;
excelurl = "http://101.132.157.106:8880/resources/resources_excel?pageSize="+pageSize+"&startIndex="+startIndex+"&astId="+astId+"&aitId="+aitId+"&actId="+actId+"";
$("#execl").attr("href",excelurl);
window.location.href=excelurl;
})
}