nodejs利用csv导出文件

小弟我才开始写博客,如果不合理之处请提出来,我改之,本文是关于nodejs中利用csv做文件的导出功能,在该例子中主要利用了fast-csv包对数据进行导出为csv文件格式,由于最近在做一个关于nodejs导出的excel的功能,在网上找了很久都没有找到合适的文档,最后找到了关于csv的导出,下面是关于nodejs代码

接下来的代码是关于csv导出的js,其中首先需要导包:fast-csvfs包;

var fs = require("fs");
var csv = require("fast-csv");
module.exports = {
    /**
     *
     * @param req:request
     * @param res:response
     * @param getTitle:获取excel的第一行名称
     * @param rows:每一行数据,用json数组表示
     * @param filezName:导出文件名
     */
    downLoad:function(req,res,getTitle,rows,fileName){
        //用于判断是否是最后一个数据信息
        var endLine = false;
        var stream = null;
        var argus = process.argv.splice(2);
        if(!argus || argus.length == 0){
            stream = fs.createWriteStream("D:/temp.csv");
        }else{
            stream = fs.createWriteStream(argus[0]);
        }
        stream.on("finish", function(){
            res.download('D:/temp.csv',fileName+'.csv',function(){
				fs.unlinkSync('D:/temp.csv'); //删除临时文件
			});

        });

        //生成头部
        var csvStream = csv.format({headers: true})
            .transform(getTitle);
        csvStream.pipe(stream);
        rows.forEach(function(row){
            csvStream.write(row);
        });

        //关闭写入
        csvStream.end(function(){
            console.log("end");
        });
    }
}

在最后附上调用该js文件的例子,该例子是写在router路由里面的,当页面点击导出的时候执行的代码,如下
var express = require('express');
var router = express.Router();
var fs = require("fs");
var downLoadUtil = require('../download');//这里引用
router.get('/exportCsv', function(req, res, next) {
    downLoadUtil.downLoad(req,res,function(row){
        return {"编号":row.id,"名称":row.name,"姓名":row.title};
    },[{id:1,name:'test',title:'title1'},{id:2,name:'test',title:'title2'},{id:3,name:'test',title:'title3'}],'testFile')
});

module.exports = router;
在上面的代码中function(row){return {"编号":row. id,"名称":row. name,"姓名":row. title}返回的是csv文件的第一行表头,[{ id:1, name:'test', title:'title1'},{id:2,name:'test',title:'title2'}]表示输出在csv文件中的内容。
注意:上面颜色相同的部分名称一定要一样,而且rows是一个json数组;
csv输出文件内容格式如下:
编号 名称 姓名
1 test title1
2 test title2



  
 
  



猜你喜欢

转载自blog.csdn.net/fuweilian1/article/details/60763521