使用django时下载xlsx的方法,同样适用于其他类型的文件。

使用openpyxl库生成xlsx文件,使用save_virtual_workbook方法将文件保存到内存中,然后发送给客户端。

重要的是要设置response的content_type,根据不同的文件类型进行设置,xlsx的是'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',还要设置Content-Disposition为'attachment; filename=test.xlsx'。

服务端示例如下:

from openpyxl import Workbook
from django.http import HttpResponse
from openpyxl.writer.excel import save_virtual_workbook
from openpyxl.styles import Border, Font, Side, Alignmentdef get_xlsx(request):sheel_name = 'test'datas = []workbook = Workbook()sheet = workbook.activesheet.title = sheel_nameborder = Border(*([Side(style='thin', color='000000')] * 4))rows, columns = len(datas), len(datas[0])max_width = 0for row in range(rows):sheet.row_dimensions[row + 1].height = 18for column in range(columns):the_cell = sheet['%s%s' % (chr(column + 65), row + 1)]the_cell.value, the_cell.border = datas[row][column], borderif row > 0:if column == 3:if '\n' in the_cell.value:the_cell.alignment = Alignment(horizontal='left', vertical='top')else:the_cell.alignment = Alignment(horizontal='left', vertical='center')if len(the_cell.value) > max_width:max_width = len(the_cell.value)elif column == columns - 1:the_cell.alignment = Alignment(horizontal='right', vertical='center')the_cell.number_format = '0.00  'else:the_cell.alignment = Alignment(horizontal='center', vertical='center')else:the_cell.alignment = Alignment(horizontal='center', vertical='center')for column in range(columns):sheet['%s1' % chr(column + 65)].font = Font(bold=True)column_width = 20 if column < 3 else (12 if column > 3 else (int(max_width * 1.58) or 30))sheet.column_dimensions[chr(column + 65)].width = column_widthworkbook.close()response = HttpResponse(save_virtual_workbook(workbook), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % sheel_namereturn response

客户端使用ajax请求获取表格文件数据,然后创建一个包含数据的虚拟链接作为a标签的链接,触发a标签后删除a标签。重要的是ajax请求中要设置参数xhrFields: {responseType: 'blob'},这样才能正常识别文件。

JS兼容性示例如下:

$(".download")[0].onclick = function () {$.ajax({method:'POST',url:'...',data: {...},xhrFields: {responseType: 'blob'},success:function (blob) {var filename = 'test.xlsx',URL = window.URL || window.webkitURL,bloburl = URL.createObjectURL(blob),anchor = document.createElement("a");if ('download' in anchor) {anchor.style.visibility = "hidden";anchor.href = bloburl;anchor.download = filename;document.body.appendChild(anchor);var evt = document.createEvent("MouseEvents");evt.initEvent("click", true, true);anchor.dispatchEvent(evt);document.body.removeChild(anchor);} else if (navigator.msSaveBlob) {navigator.msSaveBlob(blob, filename);} else {location.href = bloburl;}},fail:function () {}})
};

django下载xlsx的方法相关推荐

  1. 前端下载流文件xlsx表格方法

    以下为为使用axios下载.xlsx表格示例代码,下载其他格式文件自行修改mime类型与文件后缀即可 export function downloadFn(url, params, filename) ...

  2. 下载xlsx表格 和 上传xlsx表格 方法 适用于vue react

    exportXlsx函数下载xlsx, 安装 npm i downxlsxdog -S 引入 import { exportXlsx } from 'downxlsxdog' 调用格式 exportX ...

  3. django下载excel,使用django-excel插件

    django下载Excel,使用django-excel插件 由于目前的资料多是使用pandas或xlwt库实现的.其实没有那么的麻烦,因为django有相对应的插件django-excel. 该插件 ...

  4. python excel插件_django使用插件下载excel的方法

    本篇文章给大家带来的内容是关于django使用插件下载excel的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 由于目前的资料多是使用pandas或xlwt库实现的.其实没有那 ...

  5. python下电影_Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法...

    本文实例讲述了Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法.分享给大家供大家参考,具体如下: 做个笔记 (python 3.6,django 2.0) def get_ur ...

  6. 【Django下载文件-Kml文件下载】

    Django下载文件系列 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 开发应该了解的Web文件下载 第二章 Django下载文件-三种方法 第三章 Django下载文件- ...

  7. js下载文件的方法(H5、PC)(小程序)

    一.H5,PC 当后端返回的资源是链接时,此时可以使用 a 标签或者 window.location.href直接打开下载. 1.a 标签形式 利用a标签download 属性,当a标签被点击时,浏览 ...

  8. 纯前端实现下载xlsx.js实现下载

    1.下载xlsx package.json 里面可以看版本 "xlsx": "^0.17.5" 2.在需要用的页面引入 import { utils as xl ...

  9. python软件安装链接电视_Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法...

    本文实例讲述了Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法.分享给大家供大家参考,具体如下: 做个笔记 (python 3.6,django 2.0)def get_url ...

  10. vue下载xlsx文档流(导出功能)

    一.记录一次前端下载xlsx文档流: 思路: 1. 调用接口接受后台返回的文档流资源, 2.通过内置对象Blob构造器进行解析得到链接地址 3.通过a标签的下载功能得到资源 说下中间踩得坑, 首先项目 ...

最新文章

  1. matlab 单元,MATLAB单元阵列
  2. (转载)grep的使用
  3. Tomact和MySql搭建android简单服务器
  4. SQL存储过程中调用存储过程返回的表
  5. ASP.NET : Kerberos网络认证过程
  6. AUTOSAR从入门到精通100讲(十一)-AUTOSAR NVM基础知识
  7. java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)
  8. 信息学奥赛一本通(1227:Ride to Office)
  9. python 协程和异步的关系_python 协程和异步I/O的实践
  10. Blob URL 是什么?
  11. ModuleNotFoundError: No module named ‘matplotlib‘ 解决办法
  12. 计算机网络数据链路层之使用点对点信道
  13. 华为HCIE云计算之FC添加ipsan数据存储
  14. 软件工程技术--第四章 概要设计
  15. element-ui tabs组件导致页面假死浏览器崩溃
  16. 华为披露手机出货超1亿台的“两点”意图
  17. mysql聚合函数匹配_MySQL 05章_模糊查询和聚合函数
  18. 【CSS】css 给盒子添加四周阴影
  19. 对话,对话,全是超级爆笑对话
  20. 河南专升本公共英语语法考点分析---动词时态

热门文章

  1. 用户故事与用户故事地图——互联网平台建设
  2. 婴幼儿体重在线计算机,宝宝身高体重标准计算器
  3. oracle驱动包如何看版本,查看JDBC驱动版本
  4. SOME/IP报文格式-Message ID
  5. 网络编程(三)sqlist轻量级数据库的简单应用
  6. qam报告matlab,16QAM调制解调(MATLAB)..doc
  7. 基于Go调用国密SM2算法
  8. Eova项目嵌入前端页面介绍
  9. Python考试题库(含答案)
  10. 系统辨识(一):相关概念