登录  /  注册
首页 > web前端 > js教程 > 正文

NodeJs怎么实现下载Excel文件功能?

青灯夜游
发布: 2020-09-10 10:48:33
转载
3113人浏览过

nodejs怎么实现下载excel文件功能?下面本篇文章就来给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

NodeJs怎么实现下载Excel文件功能?

【视频教程推荐:node js教程 】

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&amp;M'", (new Date(Date.UTC(2013, 6, 9))).oaDate(), false, 1.2], ["null", null, null, null]];    for (var i = 0; i <p>3.excel-export 提供了4种类型的数据格式,数字,时间,真假,默认字符串</p><p class="brush:javascript;gutter:true;">cols可以为设置列类型的 caption为列名(会填充第一行的内容),type为列数据类型,beforeCellWrite可以在填充之前对数据进行逻辑处理,width可以定义宽带</p><p class="brush:javascript;gutter:true;">rows为一个二位数组,直接按照行列方式填充excel的内容</p><p>name定义sheet的名字</p><p>值得注意的时候excel-export如果需要定义excel的默认格式,需要引用一个excel的格式头,这个头定义在styles.xml中,这个文件可以在node_modules/example/styles.xml中拷贝的项目对应目录</p><p>例子用的是根目录,所以我们需放在根目录,不然就会报找不到这个文件。</p><p>实际开发中,有时候excel的文件导出时要用中文,这时候要设置下header和格式化中文即可</p><p>res.setHeader('Content-Type', 'application/vnd.openxmlformats;charset=utf-8');<br>res.setHeader("Content-Disposition", "attachment; filename=" +encodeURIComponent("导出列表")+".xlsx");</p><p>更多编程相关知识,可访问:<a href="https://www.php.cn/course.html" target="_blank" textvalue="编程入门">编程入门</a>!!</p>
登录后复制

以上就是NodeJs怎么实现下载Excel文件功能?的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:博客园网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号