主要思路如下:
// 要導出的數據
var data= [{
a1: '111',
a2: '22'
}];
// 列標題
var str = '<tr><td>姓名</td><td>性別</td></tr>';
// 循環遍歷,每行加入tr標簽,每個單元格加td標簽
for (let i = 0, len = data.length; i < len; ++i){
str += '<tr>';
for (let item in data[i]){
// 增加\t為了不讓表格顯示科學計數法或者其他格式
str += `<td>${ data[i][item] + '\t'}</td>`;
}
str += '</tr>';
}
var template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
<x:Name>${worksheet}</x:Name>
<x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
</head><body><table>${str}</table></body></html>`;
//下載模板
window.location.href = uri + base64(template)
//輸出base64編碼
function base64 (s) { return window.btoa(unescape(encodeURIComponent(s))) }
可能會出現科學計數法
td標簽加上 style="mso-number-format:'\@';" 樣式后 可以解決 ,
另外,我在npm上發布可一個目前只支持react的組件 npm i xlsx-jsons
支持json與excle的互轉。原理是用js-xlsx封裝的組件。有興趣的同學可以去試試。有其他特殊需求的,可以聯系我,不定期更新
