nodejs作为一门新的语言,报表功能也不是十分完善。

(1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / XLSB / XLS / CSV,解析采用纯js实现,写入需要依赖nodejs或者FileSaver .js实现生成写入Excel,可以生成子表Excel,功能强大,但上手难度稍大。不提供基础设置Excel表格api例单元格宽度,文档有些乱,不适合快速上手;

https://github.com/SheetJS/js-xlsx

(2).node-xlsx : 基于Node.js解析excel文件数据及生成excel文件,仅支持xlsx格式文件;

https://github.com/mgcrea/node-xlsx

(3).excel-parser : 基于Node.js解析excel文件数据,支持xls及xlsx格式文件,需要依赖python,太重不太实用;

https://github.com/leftshifters/excel-parser

(4).excel-export : 基于Node.js将数据生成导出excel文件,生成文件格式为xlsx,可以设置单元格宽度,API容易上手,无法生成worksheet字表,比较单一,基本功能可以基本满足;

https://github.com/functionscope/Node-Excel-Export

(5).node-xlrd : 基于node.js从excel文件中提取数据,仅支持xls格式文件,不支持xlsx,有点过时,常用的都是XLSX 格式。

nodejs刚出来那几年开发人员写了很多node依赖库,但是大部分现在处于不维护状态。

现在还在持续更新的只有node-xlsx excel-export推荐使用,js-xlsx作为一个大而全的基础库(虽然现在也不在更行了,此库最大的问题是api十分不友好,学习曲线高)有能力的项目组可以进一步封装,。

本篇为一个简单的下载的DEMO ,就简单使用excel-export,

  1. var express = require('express');
  2. var router = express.Router();
  3. var server = express();
  4.  
  5. server.use('/api', router);
  6.  
  7. var nodeExcel = require('excel-export');
  8.  
  9. const disableLayout ={layout: false};
  10.  
  11. router.get('/test', function(req, res, next) {
  12. res.json({
  13. code:200
  14. })
  15. })
  16.  
  17. // disable interface layout.hbs user config layout: false
  18. router.get('/exportExcel/:id', function(req, res, next) {
  19. var conf ={};
  20. conf.stylesXmlFile = "styles.xml";
  21. conf.name = "mysheet";
  22. conf.cols = [{
  23. caption:'string',
  24. type:'string',
  25. beforeCellWrite:function(row, cellData){
  26. return cellData.toUpperCase();
  27. },
  28. width:300
  29. },{
  30. caption:'date',
  31. type:'date',
  32. beforeCellWrite:function(){
  33. var originDate = new Date(Date.UTC(1899,11,30));
  34. return function(row, cellData, eOpt){
  35. console.log((cellData - originDate));
  36. if (eOpt.rowNum%2){
  37. eOpt.styleIndex = 1;
  38. }
  39. else{
  40. eOpt.styleIndex = 2;
  41. }
  42. if (cellData === null){
  43. eOpt.cellType = 'string';
  44. return 'N/A';
  45. } else
  46. return (cellData - originDate) / (24 * 60 * 60 * 1000);
  47. }
  48. }()
  49. },{
  50. caption:'bool',
  51. type:'bool'
  52. },{
  53. caption:'number',
  54. type:'number'
  55. }];
  56. conf.rows = [
  57. ['pi', '2013-12-5', true, 3.14],
  58. ["e", new Date(2012, 4, 1), false, 2.7182],
  59. ["M&M<>'", new Date(Date.UTC(2013, 6, 9)), false, 1.61803],
  60. ["null date", null, true, 1.414]
  61. ];
  62. var result = nodeExcel.execute(conf);
  63. res.setHeader('Content-Type', 'application/vnd.openxmlformats');
  64. res.setHeader("Content-Disposition", "attachment; filename=" + encodeURIComponent("导出列表")+".xlsx");
  65. res.end(result, 'binary');
  66. });
  67.  
  68. router.get('/exportmultisheetExcel/:id', function(req, res, next) {
  69. var confs = [];
  70. var conf = {};
  71. conf.cols = [{
  72. caption: 'string',
  73. type: 'string'
  74. },
  75. {
  76. caption: 'date',
  77. type: 'date'
  78. },
  79. {
  80. caption: 'bool',
  81. type: 'bool'
  82. },
  83. {
  84. caption: 'number 2',
  85. type: 'number'
  86. }];
  87. conf.rows = [['hahai', (new Date(Date.UTC(2013, 4, 1))).oaDate(), true, 3.14], ["e", (new Date(2012, 4, 1)).oaDate(), false, 2.7182], ["M&M<>'", (new Date(Date.UTC(2013, 6, 9))).oaDate(), false, 1.2], ["null", null, null, null]];
  88. for (var i = 0; i < 3; i++) {
  89. conf = JSON.parse(JSON.stringify(conf)); //clone
  90. conf.name = 'sheet'+i;
  91. confs.push(conf);
  92. }
  93. var result = nodeExcel.execute(confs);
  94. res.setHeader('Content-Type', 'application/vnd.openxmlformats');
  95. res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx");
  96. res.end(result, 'binary');
  97. });
  98.  
  99. var server=server.listen(8080,function(){
  100. console.log('8080')
  101. })

3.excel-export 提供了4种类型的数据格式,数字,时间,真假,默认字符串

cols可以为设置列类型的 caption为列名(会填充第一行的内容),type为列数据类型,beforeCellWrite可以在填充之前对数据进行逻辑处理,width可以定义宽带

rows为一个二位数组,直接按照行列方式填充excel的内容

name定义sheet的名字

值得注意的时候excel-export如果需要定义excel的默认格式,需要引用一个excel的格式头,这个头定义在styles.xml中,这个文件可以在node_modules/example/styles.xml中拷贝的项目对应目录

例子用的是根目录,所以我们需放在根目录,不然就会报找不到这个文件。

实际开发中,有时候excel的文件导出时要用中文,这时候要设置下header和格式化中文即可

res.setHeader('Content-Type', 'application/vnd.openxmlformats;charset=utf-8');
res.setHeader("Content-Disposition", "attachment; filename=" +encodeURIComponent("导出列表")+".xlsx");

NodeJs实现下载Excel文件的更多相关文章

  1. 在线读取Mongodb数据库下载EXCEL文件

    版本:Mongodb2.4.8 通过页面下载Excel文件 jsp <%@ page language="java" contentType="text/html; ...

  2. C# 之 下载EXCEL文件,自动用迅雷下载aspx

    在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id&q ...

  3. 前端下载excel文件功能的三种方法

    1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这 ...

  4. 前端调用后端接口下载excel文件的几种方式

    今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...

  5. jsp下载excel文件

    jsp下载excel文件的的实现方法很多,今天也遇到这个问题,乱敲了一阵,终于搞定了,记下来和朋友们分享吧. 假设需要下载excel文件的jsp页面名为:down.jsp 对应的后台action名为: ...

  6. angularJS通过post方法下载excel文件

    最近工作中遇到,要使用angularJS的post方法来下载excel的情况.网上找到一个帖子:http://stackoverflow.com/questions/22447952/angularj ...

  7. JAVA web端JS下载excel文件

    JSP代码如下: JSP端引入jquery.easyui.min.js库: <script type="text/javascript" src="<c:ur ...

  8. 【小坑】java下载excel文件

    excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩…… 1.inputstream序列化问题 Could not write JSON document: ...

  9. 下载Excel文件功能通过火狐浏览器下载没有后缀名

    最近遇到一个问题,用导出Excelwe文件使用Chrome浏览器是没有问题的,但是用火狐浏览器会出现下载的Excel文件没有后缀名.检查了很多东西都没找到原因.最后和之前的下载功能做对比发现,Exce ...

随机推荐

  1. Hama安装及示例运行

    Hama介绍 Apache Hama是一个纯BSP(Bulk Synchronous Parallel)计算框架,模仿了Google的Pregel.用来处理大规模的科学计算,特别是矩阵和图计算. BS ...

  2. linux及hadoop修改权限

    linux下修改文件权限: 在shell环境里输入:ls -l 或者 ls -lh drwxr-xr-x 2 nsf users 1024 12-10 17:37 下载文件备份对应:文件属性 连接数 ...

  3. c# try-finally有什么用

     finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的.finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的.final ...

  4. Web渗透测试(sql注入 access,mssql,mysql,oracle,)

    Access数据库注入: access数据库由微软发布的关系型数据库(小型的),安全性差. access数据库后缀名位*.mdb, asp中连接字符串应用-- "Driver={micros ...

  5. java 集合框架(四)Set

    一.概述 Set是一种没有重复元素的集合,它所有的方法都是直接继承自Collection接口,并且添加了一个对重复元素的限制.Set要求强化了equals和hashCode两个方法,以使Set集合可以 ...

  6. 6.2 PowerPC处理器如何处理MSI中断请求

    PowerPC处理器使用OpenPIC中断控制器或者MPIC中断控制器,处理外部中断请求.其中MPIC中断控制器基于OpenPIC中断控制器,但是作出了许多增强,目前Freescale新推出的Powe ...

  7. RTSP协议分析

    RTSP 协议分析 1.概述:  RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetw ...

  8. Linux以列表格式显示块设备

    Linux以列表格式显示块设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lsblk -l NAME MAJ:MIN RM SIZE RO TYPE MO ...

  9. Mysql简单笔记

    对oracle还是比较熟悉的,对mysql也是零散的有些了解,今天看了下,简单总结: 1.查看mysql版本:mysqladmin --version2.查看mysql进程:ps -ef|grep m ...

  10. textarea的不可拉伸和不可编辑

    不可拉伸: textarea { resize: none; } 不可编辑: 第一种方法: <textarea disabled></textarea> 第二种方法: < ...