分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

NodeJs实现下载Excel文件

发布时间:2023-09-06 01:43责任编辑:傅花花关键词:Node

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,

var express = require(‘express‘);var router = express.Router();var server = ?express();server.use(‘/api‘, router); var nodeExcel = require(‘excel-export‘); const disableLayout ={layout: false}; router.get(‘/test‘, function(req, res, next) { ????res.json({ ????????code:200 ????}) }) // disable interface layout.hbs ?user config layout: falserouter.get(‘/exportExcel/:id‘, function(req, res, next) { ???var conf ={}; ???conf.stylesXmlFile = "styles.xml"; ???conf.name = "mysheet"; ???conf.cols = [{ ???????caption:‘string‘, ???????type:‘string‘, ???????beforeCellWrite:function(row, cellData){ ???????????return cellData.toUpperCase(); ???????}, ???????width:300 ???},{ ???????caption:‘date‘, ???????type:‘date‘, ???????beforeCellWrite:function(){ ???????????var originDate = new Date(Date.UTC(1899,11,30)); ???????????return function(row, cellData, eOpt){ ???????????????console.log((cellData - originDate)); ???????????????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:‘bool‘, ???????type:‘bool‘ ???},{ ???????caption:‘number‘, ???????type:‘number‘ ???}]; ???conf.rows = [ ???????[‘pi‘, ‘2013-12-5‘, true, 3.14], ???????["e", new Date(2012, 4, 1), false, 2.7182], ???????["M&M<>‘", new Date(Date.UTC(2013, 6, 9)), false, 1.61803], ???????["null date", null, true, 1.414] ???]; ???var result = nodeExcel.execute(conf); ???res.setHeader(‘Content-Type‘, ‘application/vnd.openxmlformats‘); ???res.setHeader("Content-Disposition", "attachment; filename=" + encodeURIComponent("导出列表")+".xlsx"); ???res.end(result, ‘binary‘);}); router.get(‘/exportmultisheetExcel/:id‘, function(req, res, next) { ???var confs = []; ???var conf = {}; ???conf.cols = [{ ???????caption: ‘string‘, ???????type: ‘string‘ ???}, ???????{ ???????????caption: ‘date‘, ???????????type: ‘date‘ ???????}, ???????{ ???????????caption: ‘bool‘, ???????????type: ‘bool‘ ???????}, ???????{ ???????????caption: ‘number 2‘, ???????????type: ‘number‘ ???????}]; ???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]]; ???for (var i = 0; i < 3; i++) { ???????conf = JSON.parse(JSON.stringify(conf)); ??//clone ???????conf.name = ‘sheet‘+i; ???????confs.push(conf); ???} ???var result = nodeExcel.execute(confs); ???res.setHeader(‘Content-Type‘, ‘application/vnd.openxmlformats‘); ???res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx"); ???res.end(result, ‘binary‘);});var server=server.listen(8080,function(){ ???console.log(‘8080‘)})

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文件

原文地址:https://www.cnblogs.com/yiyi17/p/8466089.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved