1. 程式人生 > >Web excel匯出 Linux亂碼 數字匯出格式顯示錯誤處理

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]>