基于django开发下载excel文件的接口

有需求需要将数据以excel形式输出,基本思路如下:

定义Excel工作本对象 => 查询数据 => 写入工作本对象 => 转换为二进制流返回

遇到的问题是如何在不将文件落盘的情况下,转为二进制流输出。
查找了一些资料,对比使用后,如下方法:
伪代码:

# 创建工作本
f = xlwt.Workbook()
# 工作本写入数据
f.write()
# 创建二进制流
buf = io.BytesIO()
# excel文件的二进制流写到流中
f.save(buf)
# 从流中读取数据到ff 
buf.seek(0)
ff = buf.read()
# 最后可以将ff保存或者发送

函数代码如下:

def download_excel():
	# 定义样式
	style = xlwt.XFStyle()
	font = xlwt.Font()
	font.name = 'SimHei'
	font.bold = True
	font.color_index = 4
	font.height = 220
	style.font = font
	
	# 定义工作本
	f = xlwt.Workbook()
	# sheet
	sheet1 = f.add_sheet('API文档', cell_overwrite_ok=True)
	# 标题
	sheet1.write_merge(0, 0, 0, 1, 'API文档', style)
	# 写第一列
	colum0 = ["名称", "描述", "URL", "方式", "内容"]
	for i in range(0, len(colum0)):
	    sheet1.write(i + 1, 0, colum0[i], style)
	
	# 写第二列
	colum1 = [model_obj.model_name, model_obj.model_params, model_obj.url, model_obj.method, model_obj.model_readme]
	for i in range(0, len(colum1)):
	    sheet1.write(i + 1, 1, colum1[i], style)
	    
	# 创建二进制流
	buf = io.BytesIO()
	f.save(buf)  # excel文件的二进制流写到buf
	buf.seek(0)
	ff = buf.read()
	
	name = "{}.xls".format(model_obj.model_name.split(".")[0])
	
	response = HttpResponse(ff)
	response['Content-Type'] = 'application/octet-stream'
	response['Content-Disposition'] = 'attachment;filename="{}"'.format(name)
	
	return response
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值