导出列表数据

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 数据库中时,我应该怎么做才能使列表视图在片段中工作

如何在片段中填充列表视图?

Android:NullPointerException 无法将数据库加载到片段内的列表视图中

导出列表数据

如何从片段内的列表视图打开链接网址?