导出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));
前台代码:
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文件的。