NodeJs实现下载Excel文件

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: false
router.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");

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

时间: 2024-08-04 15:43:51

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

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

1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这种方式比较适用于该数据需要能够导出下载并且同时要展现在页面的场景 2 通过form表单接收文件 如果后端已经处理成了excel,就不需要前端在处理生成,但是Ajax能够返回的数据格式只能为html,script,json,xml,不能直接接受excel文件,如果你直接通过ajax去获取文件就会报错.

解决:下载EXCEL文件,自动用迅雷下载aspx

解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id"] != null && !string.IsNullOrEmpty(Request.QueryString["id"].ToString())) { if (Request.QueryString["oid"] != null && !string.IsNullOrEmpty(Request.QueryStr

jsp下载excel文件

jsp下载excel文件的的实现方法很多,今天也遇到这个问题,乱敲了一阵,终于搞定了,记下来和朋友们分享吧. 假设需要下载excel文件的jsp页面名为:down.jsp 对应的后台action名为:downExcel.java(用struts实现,其他框架也类似) 在downExcel.java的添加downAction方法,实现下载步骤 public ActionForward downAction(ActionMapping mapping, ActionForm form,    Htt

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

在浏览器中导出 Excel 得时候,如果浏览器绑定了迅雷,则会下载aspx文件. 解决:下载EXCEL文件,自动用迅雷下载aspx if (Request.QueryString["id"] != null && !string.IsNullOrEmpty(Request.QueryString["id"].ToString())) { if (Request.QueryString["oid"] != null &&am

下载EXCEL文件Utils

import jxl.*; import jxl.biff.DisplayFormat; import jxl.format.Alignment; import jxl.format.BoldStyle; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.*; import jxl.format.VerticalAlignment; import jxl.write.*; import j

angularJS通过post方法下载excel文件

最近工作中遇到,要使用angularJS的post方法来下载excel的情况.网上找到一个帖子:http://stackoverflow.com/questions/22447952/angularjs-http-post-convert-binary-to-excel-file-and-download ,改动了里面部分代码搞定. 详细代码: $http.post($rootScope.restful_api.last_output_excel,body_data,{responseType:

【小坑】java下载excel文件

excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩…… 1.inputstream序列化问题 Could not write JSON document: No serializer found for class java.io.FileDescriptor and no properties discovered to create BeanSerializer 客户端调取服务端上传,从前台获取的file文件中拿到inputstream,做一些判断

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

最近遇到一个问题,用导出Excelwe文件使用Chrome浏览器是没有问题的,但是用火狐浏览器会出现下载的Excel文件没有后缀名.检查了很多东西都没找到原因.最后和之前的下载功能做对比发现,Excel的文件名不一样,之前的Excel文件名没有时间戳 ,文件名是:xxx2019-08-12 12_23_23.xls,通过Chrome和火狐对比发现,火狐会把空格之后的部分截取掉,导致文件后缀名也被截取掉了.解决办法是文件改为xxx2019-08-12_12_23_23.xls,这样问题就解决了.

MVC下载Excel文件:js接受乱码 简单处理办法

在做考试系统的时候,需要向题库里面批量导入试题.所以在导题之前需要下载一个Excel模版. 在MVC中下载模版,需要创建一个Excel模版,然后发到前台.即点击之后,弹出一个下载框,提示下载(保存位置). 现象:在MVC中,点击下载模版按钮,不提示下载. 原因:js接受 FileResult类型乱码. 如果是单纯的生成一个特定的Excel的文件,然后发到前台,即没有参数的下载.如果是这样的话直接让Controller创建,返回一个FileResult文件,前台就直接弹窗提示了. 但是下载导入模版