导出Excel功能

从服务端到浏览器的简单处理, 仅供参考

服务端定义一个导出功能的关键代码

Java 定义一个export的功能函数,以下为关键代码(接口中的一部分处理逻辑):

@Override
public byte[] export(String startdate, String enddate, Integer type, String name,HttpServletResponse response) {// other logic omitted here ...// set response args,it used for open downloadresponse.reset();response.setContentType("application/vnd.ms-excel;charset=utf-8");try {response.setHeader("Content-Disposition", "attachment;filename=" + new String((name+ ".xls").getBytes(), "iso-8859-1"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}ByteArrayOutputStream output = new ByteArrayOutputStream();try {workList.write(output); // write} catch (IOException e) {e.printStackTrace();}return output.toByteArray();
}

前端处理

  1. 方式1:使用ng1实现,在自定义指令中来通过接口接收数据流 [ 存在兼容问题的方式 ]

指令如下:

angular.module('yourNgApp').directive('sysExport', function ($http, $document) {return {templateUrl: "app/system/export/export.directive.html",restrict: 'EA',replace: true,scope: {item: '='},link: function (scope, element) {// 访问请求的函数function getExport(postData) {// 拼出自己的urlvar url = '/api/course/export?startdate=' + postData.startdate + '&enddate=' + postData.enddate + '&type=' + postData.type + '&name=' + postData.name;// 注意下面的responseType 一定要有哦!var finalPostData = {url: url,method: 'POST',responseType: "arraybuffer",headers: {'Content-type': 'application/json'}};$http(finalPostData).success(function (data) {var blob, fileName, blobArgs;blobArgs = {type: 'application/vnd.ms-excel application/x-excel'};blob = new Blob([data], blobArgs);var a = $document[0].createElement('a');a.download = postData.name + '.xls';a.href = URL.createObjectURL(blob);a.click();}).error(function (e) {console.log(e);});}element.on('click', function () {getExport(scope.item);});}};});
  • 至此可实现通过指令的点击事件来下载excel格式了。
  • 因为导出功能多用于后台管理,适用性不是很普遍,所以兼容问题可协商,所以前台使用了Blob对象。
  • 为了节约服务器资源可通过此种方式通过点击来下载,而不是将导出的文件单独存放到服务器上通过返回excel所在的url地址来进行下载。

2)方式2:直接通过a链接访问,[兼容性好]

示例:

<a href="/api/course/export?startdate={{cl.startdate}}&enddate={{cl.enddate}}&type={{cl.type}}&name={{cl.name}}" class="btn btn-success">导出</a>

扩展

  • mine 类型: http://www.w3school.com.cn/media/media_mimeref.asp
  • Blob的用法和兼容性:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob
  • Java 端用于导出excel的工具 poi : http://poi.apache.org/ https://github.com/apache/poi
  • 关于 a.download以及它的兼容性 : http://www.w3school.com.cn/tags/att_a_download.asp
  • 关于 URL.createObjectURL : https://developer.mozilla.org/zh-CN/docs/Web/API/URL/createObjectURL

总结

上面前端用到的都是一些H5高级API 适用性不是很高, 但也临时解决了一些问题,只作为尝试 :)
通过a链接的方式请求, 直接在服务器端完成文件的操作,点击后直接下载,兼容良好,但不适合大文件的传输下载。

导出Excel功能-从服务端到浏览器的简单处理相关推荐

  1. ruoyi框架默认的导出Excel功能代码简析

    ruoyi框架默认导出Excel功能 项目使用的是RuoYi Bootstrap多模块版本4.7.2,启动项目后会有默认的导出功能.包括使用ruoyi自带代码生成器,都会有导出功能的附带.接下就讲解一 ...

  2. 纯jquery 前端导入 Excel数据 减少服务端压力

    纯jquery 前端导入 Excel数据 减少服务端压力 前提是要导入jq库在这里就不再累述 重要的是导入xlsx.core.min.js 我根据xlsx.core.min.js编写自己的工具类 这里 ...

  3. 服务器导出excel文档,服务器导出excel功能配置

    服务器导出excel功能配置 内容精选 换一换 该任务指导用户完成Linux云服务器的相关配置与其他驱动的安装,为最终生成的Linux裸金属服务器私有镜像做准备.配置Linux云服务器.具体操作请参考 ...

  4. vue项目导出EXCEL功能

    因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...

  5. java使用jxls导出excel功能

    在java的开发里,导出excel功能会经常遇到的,而jxls框架提供了很大的方便. jxls官网:http://jxls.sourceforge.net/,官网的下载包里面也提供详细的文档说明. 下 ...

  6. 假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)...

    我们辛苦录入的数据都希望能有重复利用的价值,一方面这些基础数据需要有数据库级的重复利用,程序级别的重复利用,另一方面还需要直接可以方便的导出倒入的功能比较好,虽然我们自己制作的统计分析功能很强大,但是 ...

  7. django excel 导出页面_Django Admin中增加导出Excel功能过程解析

    在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 增加导出Excel功能 在Django Admin中每个模型的Admin类(继承至admin.ModelAdmin ...

  8. Java集成Hutool实现导出Excel功能

    原文来自:https://www.j1angrui.cn/article/2019081623 在工作中刚完成项目集成Hutool实现导出Excel功能,现在记录一下实现过程,方便以后作为例子参考. ...

  9. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

最新文章

  1. HashMap 在并发下可能出现的问题分析!
  2. 高斯模糊与高反差保留
  3. python【蓝桥杯vip练习题库】BASIC-18 矩形面积交(线段交)
  4. Kinect for windows的脸部识别
  5. Oracle 10G 全新创建数据库过程(暂记)
  6. 错误The type XXX is deprecated解决
  7. 网络安全比赛理论答题(二)
  8. CLR Dynamic Languages
  9. VMWare vijava –“用户名或密码不正确”异常的奇怪情况
  10. GoCD notes
  11. 信息学奥赛C++语言:百钱买百鸡
  12. wait, notify, notifyAll
  13. 用计算机做初中模拟物理实验,仿真物理实验室初中完整版
  14. xshell 配置公钥 免密码登陆
  15. linux开发板显示动态图片,开发板上显示图片
  16. css设置动画匀速运动,CSS3 transition动画
  17. Thread小练习(网图下载)
  18. Jsp+Servlet+Mysql简单的登录
  19. win10右键一直转圈_惠普产品拆机图文哪里找?桌面点右键延迟咋办?内存怎么少了?...
  20. 工业物联网数控机床设备远程控制整体解决方案

热门文章

  1. 【字符串算法】刷题总结
  2. maven依赖--dependency命令
  3. 【Unity】可视化视野
  4. 【Linux】Windows 10 太难用,如何定制你的 Ubuntu?
  5. 【Photoshop教程】非常酷的狐狸叫派对海报
  6. 有趣的qt程序02_身高预测_python版
  7. Unity修改分辨率优化游戏性能
  8. 使用OPENCV简单实现具有肤质保留功能的磨皮增白算法
  9. 可视化-THREEJS 绘制星空
  10. ps如何重复复制一个相同的图层,以等距离、方向、角度复制?