导出列表数据
Posted ymwangel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导出列表数据相关的知识,希望对你有一定的参考价值。
最近项目需求:导出数据为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就可以了。
以上是关于导出列表数据的主要内容,如果未能解决你的问题,请参考以下文章
当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作