导出列表数据

最近项目需求:导出数据为csv格式。

项目环境:后端Node

前端用a标签的download属性下载

<a class="btn btn-primary" ng-href="http://xxxx/order/exportOrders?year={{year}}&month={{month}}" download="list.csv">导出</a>

后端代码:

 
  
var json2csv = require('json2csv');
var async = require('async');
var iconv = require('iconv-lite');
async.map(orders,function(item,callback){
                    item = {
                        "投保人姓名":item.get("customerName"),
                        "投保时间":item.createdAt,
                        "身份证号":"=" + '"' + item.get("idCardNumber") + '"',
                        "手机号码":item.get("mobilePhoneNumber"),
                        "产品名称":item.get("productName"),
                        "状态":item.status,
                        "保单号": "=" + '"' + item.get("policyNumber") + '"'
                    };
                    callback(null,item);
            },function(err,results){
                console.log(results.length);
                var fields = ['投保人姓名','投保时间', '身份证号', '手机号码','产品名称','状态','保单号'];
                json2csv({ data: results, fields: fields}, function(err, csv) {
                    if (err) console.log(err);
                    console.log(csv);
                    var csvWithoutUndefined = csv.replace(/undefined/g,"");
                    console.log(csvWithoutUndefined);
                    if(month <10){
                        month = '0' + month;
                    }
                    //需要转换字符集
                    var newCsv = iconv.encode(csvWithoutUndefined, 'GBK'); // 转编码
                    res.header('Content-Type','text/csv;charset=UTF-8;name="orders-'+ year + month + '.csv"');
                    res.header('Content-Disposition','attachment; filename="orders-' + year + month + '.csv"');
                    res.send(newCsv);

                });
            });
        },

这里,用到了json2csv模块,npm install 一下即可,用作将json数据转换为csv格式数据。还有iconv-lite模块,是用来转换字符集的。

如果没有转换字符集,那么csv数据中的中文数据在excel中打开会出现乱码。

在定义item时:代码

"保单号": "=" + '"' + item.get("policyNumber") + '"';

在保单号的值之前加上“=”,是防止数字序列位数过长,会显示成科学计数法样式。

因为http响应中content-type默认的值是text/html,所以需要将其值改为‘text/csv’,name和filename属性时规定下载文件的文件名。

此时,我们只需将csv格式的数据send就可以了。

 

转载于:https://www.cnblogs.com/ymwangel/p/5607911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值