最近有JSON导出Excel的需求,查看了很多大神的例子。记录一下
参考:/baidu_28665563/article/details/86225970
exportExcel.js代码为:
export const exportExcel = (JSONData, FileName, title, filter) => {if (!JSONData) return;//转化json为objectvar arrData = typeof JSONData != "object" ? JSON.parse(JSONData) : JSONData;var excel = "<table>";//设置表头var row = "<tr>";if (title) { //使用标题项for (var i in title) {if (typeof (title[i]) == 'string') {row += "<th align='center'>" + title[i] + "</th>";}}} else { //不使用标题项for (var i in arrData[0]) {row += "<th align='center'>" + i + "</th>";}}excel += row + "</tr>";//设置数据for (var i = 0; i < arrData.length; i++) {var row = "<tr>";for (var index in arrData[i]) {//判断是否有过滤行if (filter) {if (filter.indexOf(index) == -1) {var value = arrData[i][index] == null ? "" : arrData[i][index];row += "<td>" + value + "</td>";}} else {var value = arrData[i][index] == null ? "" : arrData[i][index];row += "<td align='center' style='width: 90px;'>" + value + "</td>";}}excel += row + "</tr>";}excel += "</table>";var excelFile ="<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='/TR/REC-html40'>";excelFile +='<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';excelFile +='<meta http-equiv="content-type" content="application/vnd.ms-excel';excelFile += '; charset=UTF-8">';excelFile += "<head>";excelFile += "<!--[if gte mso 9]>";excelFile += "<xml>";excelFile += "<x:ExcelWorkbook>";excelFile += "<x:ExcelWorksheets>";excelFile += "<x:ExcelWorksheet>";excelFile += "<x:Name>";excelFile += "{worksheet}";excelFile += "</x:Name>";excelFile += "<x:WorksheetOptions>";excelFile += "<x:DisplayGridlines/>";excelFile += "</x:WorksheetOptions>";excelFile += "</x:ExcelWorksheet>";excelFile += "</x:ExcelWorksheets>";excelFile += "</x:ExcelWorkbook>";excelFile += "</xml>";excelFile += "<![endif]-->";excelFile += "</head>";excelFile += "<body>";excelFile += excel;excelFile += "</body>";excelFile += "</html>";var uri ="data:application/vnd.ms-excel;charset=utf-8," +encodeURIComponent(excelFile);var link = document.createElement("a");link.href = uri;link.style = "visibility:hidden";link.download = FileName + ".xls";document.body.appendChild(link);link.click();document.body.removeChild(link);}
上述代码是略微修改后的代码。修改部分为:
if (title) { //使用标题项for (var i in title) {if (typeof (title[i]) == 'string') {row += "<th align='center'>" + title[i] + "</th>";}}} else { //不使用标题项for (var i in arrData[0]) {row += "<th align='center'>" + i + "</th>";}}
因为如果传入title后,在遍历的时候会多遍历出来三个函数在表头后面。所以加了一个筛选条件。
调用方法:
let title = ['序号', '宿舍楼', '楼层', '宿舍', '姓名', '班级', '人脸信息', '说明'];let fileName = '附录:未' + this.schedulesType + '学生名单';let JSONData = JSON.stringify(this.downloadData)exportExcel(JSONData, fileName, title);
其中title为表格header filename为表格名字 JSONData为表格内数据。 还接受一个参数filter为过滤项。