前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nodejs实现导出excel报表

nodejs实现导出excel报表

作者头像
OECOM
发布2020-07-01 16:58:35
5.9K0
发布2020-07-01 16:58:35
举报
文章被收录于专栏:OECOMOECOM

2019-03-15 16:34:19

生成报表并下载是作为web应用的一个传统功能,在nodejs中,很多开发人员也提供了很多的依赖来实现这一功能。

  • js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / XLSB / XLS /CSV,解析采用纯js实现,写入需要依赖nodejs或者FileSaver.js实现生成写入Excel,可以生成子表Excel,功能强大,但上手难度稍大。不提供基础设置Excel表格api例单元格宽度,文档有些乱,不适合快速上手;https://github.com/SheetJS/js-xlsx
  • node-xlsx : 基于Node.js解析excel文件数据及生成excel文件,仅支持xlsx格式文件;https://github.com/mgcrea/node-xlsx
  • excel-parser : 基于Node.js解析excel文件数据,支持xls及xlsx格式文件,需要依赖python,太重不太实用;https://github.com/leftshifters/excel-parser
  • excel-export : 基于Node.js将数据生成导出excel文件,生成文件格式为xlsx,可以设置单元格宽度,API容易上手,无法生成worksheet字表,比较单一,基本功能可以基本满足;https://github.com/functionscope/Node-Excel-Export
  • node-xlrd : 基于node.js从excel文件中提取数据,仅支持xls格式文件,不支持xlsx,有点过时,常用的都是XLSX 格式。

这里我们主要介绍一下excel-export的应用。

安装

代码语言:javascript
复制
npm install excel-export

使用

nodejs使用的框架是express,koa框架也类似。

代码语言:javascript
复制
const express = require('express');
const router = express.Router();
router.get('/exportExcel/:id', function(req, res, next) {
    let conf ={};
    let fileName = "下载文件名";
    conf.name = "mysheet";//这里标识在excel底部的表名
    conf.cols = [{
        caption:'字符串',
        type:'string',
        beforeCellWrite:function(row, cellData){
            return cellData;//这里可对数据进行格式化处理,如无需处理可直接不写即可
        },
        width:28.7109375
    },{
        caption:'日期',
        type:'date',
        beforeCellWrite:function(){
            var originDate = new Date(Date.UTC(1899,11,30));
            return function(row, cellData, eOpt){
                if (eOpt.rowNum%2){
                    eOpt.styleIndex = 1;
                }
                else{
                    eOpt.styleIndex = 2;
                }
                if (cellData === null){
                    eOpt.cellType = 'string';
                    return 'N/A';
                } else
                    return (cellData - originDate) / (24 * 60 * 60 * 1000);
            }
        }()
    },{
        caption:'布尔值',
        type:'bool'
    },{
        caption:'数值',
        type:'number'
    }];
    conf.rows = [
        ['one', new Date(Date.UTC(2013, 4, 1)), true, 3.14],
        ["two", new Date(2012, 4, 1), false, 2.7182],
        ["oecom", new Date(Date.UTC(2013, 6, 9)), false, 1.61803],
        ["网站", null, true, 1.414]
    ];
    let result = nodeExcel.execute(conf);
    res.setHeader('Content-Type', 'application/vnd.openxmlformats;charset=utf-8');
    res.setHeader("Content-Disposition", "attachment; filename=" +  encodeURIComponent(fileName)+".xlsx");//中文名需要进行url转码
    res.setTimeout(30 * 60 * 1000)//防止网络原因造成超时。
    res.end(result, 'binary');
});

分析

excel-export 提供了4种类型的数据格式:数值类型,时间类型,bool,字符串(默认值)。 通过上面的代码我们可以看出,一个表格其实就是一个json值。cols属性定义列,填入了列名、类型、宽度,还提供了填入前对数据的处理函数。 rows为一个二位数组,直接按照行列方式填充excel的内容 name定义sheet的名字,可以自定义,如不填,最采用系统默认的。

有时我们一个excel表格内包含多个表,这时我们只需要对上述代码进行稍微的改变即可。

代码语言:javascript
复制
let conf1 ={};
let conf2 ={};
let conf3 ={};
let confs = [conf1,conf2,conf3];
let result = nodeExcel.execute(confs);

上面的代码示例我写了一个简易的代码,只是将每一个表格json对象存入数组,然后再通过nodeExcel.execute执行即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 使用
  • 分析
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档