前段时间做了一个纯前端导出数据的功能,发现挺好用的,上万的数据量暂未测试,成千上百条的还是很快的,记录一下测试代码:
//可以命名文件的导出方法
function getAllData(dataArray) {
if (dataArray == null || dataArray.length == 0) {
toastr.warning("暫無數據可導出");
return;
}
var lHtml = '<table border="1"><tr style="font-size:16px;font-weight:bold;"><th>ID</th><th>测试字段1</th><th>测试字段2</th></tr>';
//循环遍历,每行加入tr标签,每个单元格加td标签
for (let i = 0; i < dataArray.length; i++) {
lHtml += '<tr>';
for (let item in dataArray[i]) {
lHtml += '<td>' + dataArray[i][item] + '\t</td>';//增加\t为了不让表格显示科学计数法或者其他格式
}
lHtml += '</tr>';
}
lHtml += '</table>';
var tableHtml = '<html><head><meta charset="UTF-8"></head><body>';
tableHtml += lHtml;
tableHtml += '</body></html>';
var excelBlob = new Blob([tableHtml], { type: 'application/vnd.ms-excel' });
var date = getNowFormatDate();
var fileName = "TEST" + date + ".xls";
if (isIE()) {
window.navigator.msSaveOrOpenBlob(excelBlob, fileName);
} else {
// 創建一个a标签
var oA = document.createElement('a');
// 利用URL.createObjectURL()方法为a元素生成blob URL
oA.href = URL.createObjectURL(excelBlob);
// 给文件命名
oA.download = "TEST" + date;
// 模拟点击
oA.click();
}
}