JSネイティブ輸出ExcelやCSV

厳密な意味では、実際にファイルをエクセルされていませんが、あなたはそれを見るために開くためにExcelを使用することができ、実際には、形式はCSVファイルでカンマ区切りのファイルです。
ここについて言うべきいくつかのピットは、以下のとおりです。

  1. 開いているExcelファイルが文字化けロゴヘッドなしのUnicode UTF8。
  2. ファイルが不正な文字に遭遇した読み出されたときのアイデンティティの追加のUnicode UTF8ヘッドが発生することがあります。
  3. IEは、ダウンロード属性タグをサポートしていません。
  4. ここでURLエンコーディングであり、また、base64でBLOBを使用することができます。

Unicodeのヘッドのロゴ:

EC BB BF UTF-8
FF FE UTF-16 UCS-2別名、リトルエンディアン
FE FF UTF-16 UCS-2別名、ビッグエンディアン
UCS-4、リトルエンディアン別名夜12時00 FF FE UTF-32。
夜12時FE FF UTF-32 UCS-4、ビッグエンディアン別名。

/*
data = {
    thead : ["第一列", "第二列", "第三列"],
    tbody : [
        ["1", "2", "3"],
        ["4", "5", "6"],
    ]
}*/
/**
 * 导出excel和csv
 * @param data 要导出的数据,需要是上面的数据格式,当然也可以重写这个方法自己定义数据格式
 * @param name 文件名
 * @param type 文件类型 xls或csv
 * @returns
 */
function exportData(data, name, type) {
    var dataStr = "";
    //Unicode头部标识
    var utf8Head = "%EF%BB%BF";
    //uri文件资源类型
    var csvUri = "data:text/csv;charset=utf-8,";
    var xlsUri = "data:application/vnd.ms-excel;charset=utf-8,";
    //创建一个a标签,用来下载
    var oa = document.createElement("a");
    var col = data.thead.length;
    var row = data.tbody.length;
    
    //数据构造
    for(var i = 0; i < col; i++) {
        dataStr += data.thead[i];
        if(i < col - 1)
            dataStr += ","
    }
    dataStr += "\n";
    
    for(var i = 0; i < row; i++) {
        for(var j = 0; j < col; j++) {
            dataStr += data.tbody[i][j];
            if(j < col - 1)
                dataStr += ",";
        }
        dataStr += "\n";
    }
    if(type === "csv") {
        //拼接编码,用url编码就可以,layui就是这种方式
        oa.href = csvUri + utf8Head + encodeURIComponent(dataStr);
        oa.download = name + ".csv";
    } else if(type === "xls") {
        oa.href = xlsUri + utf8Head + encodeURIComponent(dataStr);
        oa.download = name + ".xls";
    } else {
        return false;
    }
    //触发链接点击事件进行下载
    oa.click();
}

おすすめ

転載: www.cnblogs.com/Vaxy/p/11911470.html