Web excel匯出 Linux亂碼 數字匯出格式顯示錯誤處理
本來之前寫過一個JS匯出程式,但是也是網上東拼西湊寫出來了,這兩天有需求要寫個excel匯出,然後就出現一堆的問題,就準備記錄下來。
原諒我好多東西也是網上百度別人的,但是都彙總了一下,也好給大家看,開始正文:
js匯出excel的兩種方法:
方法一:
/*
*@tableId: table的Id
*@fileName: 生成excel檔案
* ie瀏覽器無法匯出
*/
function tableToExcel(tableID,fileName){
var table = document.getElementById(tableID);
var excelContent = table.innerHTML;
var excelFile = "<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'>";
excelFile += "<head><meta charset='UTF-8'><!--[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>";
excelFile += "<body><table>";
excelFile += excelContent;
excelFile += "</table></body>";
excelFile += "</html>";
console.log(excelFile)
var link = "data:application/vnd.ms-excel;base64," + base64(excelFile);
var a = document.createElement("a");
a.download = fileName+".xls";
a.href = link;
a.click();
}
function base64 (content) {
return window.btoa(unescape(encodeURIComponent(content)));
}
方法二:
/*
*需要引入:jquery.table2excel.js
*
*@$("#tableId"): table的id
*/
$('#btnExport').on('click', function() {
$("#tableId").table2excel({
exclude: ".noExl",
name: "Excel Document Name",
filename: "myFileName",
exclude_img: true,
exclude_links: true,
exclude_inputs: true
});
});
以上兩種方法在IE瀏覽器中無法正常使用
若需要支援ie需加以下程式碼:
if(!!window.ActiveXObject || "ActiveXObject" in window) {//判斷是否為ie覽器
var curTbl = document.getElementById("ta");
var oXL = new ActiveXObject("Excel.Application");
//建立AX物件excel
var oWB = oXL.Workbooks.Add();
//獲取workbook物件
var xlsheet = oWB.Worksheets(1);
//啟用當前sheet
var sel = document.body.createTextRange();
sel.moveToElementText(curTbl);
//把表格中的內容移到TextRange中
sel.select;
//全選TextRange中內容
sel.execCommand("Copy");
//複製TextRange中內容
xlsheet.Paste();
//貼上到活動的EXCEL中
oXL.Visible = true;
//設定excel可見屬性
try {
var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
} catch(e) {
print("Nested catch caught " + e);
} finally {
oWB.SaveAs(fname);
oWB.Close(savechanges = false);
//xls.visible = false;
oXL.Quit();
oXL = null;
//結束excel程序,退出完成
//window.setInterval("Cleanup();",1);
idTmr = window.setInterval("Cleanup();", 1);
}
}
再把遇到的問題羅列一下:
問題1:遇到匯出excel表格時,銀行賬戶號數字過長,匯出的數字串變為計數法形式
解決方案一:
<td style="mso-number-format:'\@';">100821199909091234</td>
增加了 style="mso-number-format:'\@';" 樣式後 可以解決
解決方案二:
原來的:excelFile += "<body><table>";
修改為:excelFile += '<body><table style="vnd.ms-excel.numberformat:@">';
style="vnd.ms-excel.numberformat:@"的作用是把資料轉換文字格式
問題2:js輸出漢字亂碼問題
解決方案一:
原來的:excelFile += "<head><meta ><!--[if gte mso 9]>
修改為:excelFile += "<head><meta charset='UTF-8'><!--[if gte mso 9]>