nodejs 导出csv

导出csv是比较常见的一种共能,在很多的时候都要使用,比如说用户列表、商品列表等

excel文件比较大,使用csv文件就比较合适了。

后台代码:

var beginTime = req.query.beginTime;
    beginTime = new Date(beginTime).getTime() / 1000;
    var endTime = req.query.endTime;
    endTime = new Date(endTime).getTime() / 1000;
    var nodeId = req.query.nodeId;
    var alarmName = req.query.alarmName;
    var alarmDesc = req.query.alarmDesc;
    if (!alarmName) {
        alarmName = '';
    }
    if (!alarmDesc) {
        alarmDesc = '';
    }
    var apLevel = req.query.apLevel;
    var sql = '';
    if (nodeId) {
        sql = 'select * from aalarm where ND = ' + nodeId;
    }
    else {
        sql = 'select * from aalarm';
    }
    var pointResult = openPlant.getHisResult(null, null, parseInt(beginTime).toString(), parseInt(endTime).toString(), sql);
    var pointIds = utils.getPointIdArray(pointResult);
    var nodeIds = utils.getNodeIdArray(pointResult);
    var nodeResult = openPlant.getSQLResult('select ID,PN,ND from node', null, nodeIds);
    var dataBaseId = utils.getNodeIdArray(nodeResult);
    var dataBaseResult = openPlant.getSQLResult('select ID,PN from database', null, dataBaseId);
    sql = 'select ID,PN,ND,AP,ED,RT,LC,C1,C2,C3,C4,C5,C6,C7,C8 from Point';
    var pointsInfo = openPlant.getSQLResult(sql, null, pointIds);
    var alarmArray = new Array();
    var alarmInfo;
    for (var i = 0; i < pointResult.length; i++) {
        var resObj = pointResult[i];
        for (var j = 0; j < pointsInfo.length; j++) {
            var poiObj = pointsInfo[j];
            alarmInfo = new Object();
            if (resObj.ID == poiObj.ID) {
                if ((poiObj.PN.indexOf(alarmName) > -1) && (poiObj.ED.indexOf(alarmDesc) > -1) && (apLevel.indexOf(poiObj.AP) > -1)) {
                    alarmInfo.ID = resObj.ID;
                    alarmInfo.TM = resObj.TM * 1000;
                    alarmInfo.AV = resObj.AV;
                    alarmInfo.AP = poiObj.AP;
                    alarmInfo.PN = utils.getPointName(dataBaseResult, nodeResult, poiObj);
                    alarmInfo.ED = poiObj.ED;
                    var alarmDescT = utils.getAlarmDesc(poiObj.RT, poiObj.LC, resObj.DS);
                    alarmInfo.alarmDesc = alarmDescT;
                    alarmInfo.COLOR = utils.getAlarmColor(alarmDescT, poiObj);
                    alarmArray.push(alarmInfo);
                }
                break;
            }
        }
    }
    res.send(JSON.stringify(alarmArray));


上面是我使用到的一段代码,使用到了实时数据库,我在这里将对象转化为json发送到前台

前台代码:

var beginTime = $('#hisBegin').datetimebox('getValue');
    var endTime = $('#hisEnd').datetimebox('getValue');
    var nodeId = $('#pointHisTable').combobox('getValue');
    var alarmRealName = $('#alarmHisName').textbox('getValue');
    var alarmRealDesc = $('#alarmHisDesc').textbox('getValue');
    var apLevel = '';
    if ($("#alarmHisRed").is(':checked')) {
        apLevel += '0';
    }
    if ($("#alarmHisYellow").is(':checked')) {
        apLevel += '1';
    }
    if ($("#alarmHisWhite").is(':checked')) {
        apLevel += '2';
    }
    if ($("#alarmHisGreen").is(':checked')) {
        apLevel += '3';
    }
    $.ajax({
        url: '/alarmHisExport',
        type: 'get',
        data: {
            beginTime: beginTime,
            endTime: endTime,
            nodeId: nodeId,
            alarmName: alarmRealName,
            alarmDesc: alarmRealDesc,
            apLevel: apLevel
        },
        dataType: 'json',
        success: function (data) {
            var value = data;
            var name = 'AlarmHistory' + new Date().getTime() + '.csv';
            var csvContent = "data:text/csv;charset=utf-8,\ufeff";
            if (window.navigator.msSaveOrOpenBlob) {
                csvContent = "\ufeff";
            }
            //表头
            csvContent += '序号,';
            csvContent += 'ID,';
            csvContent += '级别,';
            csvContent += '报警名称,';
            csvContent += '报警时间,';
            csvContent += '描述,';
            csvContent += '当前值,';
            csvContent += '报警描述\n';
            var index = 1;
            //构建内容
            for (var i = 0; i < value.length; i++) {
                var obj = value[i];
                csvContent += index + ',';
                csvContent += obj.ID + ',';
                csvContent += obj.AP + ',';
                csvContent += obj.PN + ',';
                csvContent += utils.formatTime(obj.TM) + ',';
                csvContent += obj.ED + ',';
                csvContent += obj.AV + ',';
                csvContent += obj.alarmDesc + '\n';
                index++;
            }
            //导出
            utils.csvExport(name, csvContent);
        }
        ,
        error: function () {
            console.log('报警历史导出异常');
        }
    });

将获取的数据,按着一定格式进行拼装,列与列之间使用逗号(,)分割,换行使用 \n;

csvExport工具类代码:

csvExport: function (name, csvContent) {
        //如果是IE浏览器
        if (window.navigator.msSaveOrOpenBlob) {
            var blob = new Blob([decodeURIComponent(encodeURI(csvContent))], {
                type: "text/csv;charset=utf-8;"
            });
            navigator.msSaveBlob(blob, name);
        } else {
            var encodedUri = encodeURI(csvContent);
            var link = document.createElement("a");
            link.setAttribute("href", encodedUri);
            link.setAttribute("download", name);
            document.body.appendChild(link);
            link.click();
        }
    }


工具类代码没有什么东西,主要是判断浏览器类型的,然后进行导出。

实际上csv的导出是从后台拿到数据,在前端生成csv文件的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值