使用JavaScript生成Excel文件时无法显示表情符号

时间:2019-07-15 07:17:38

标签: javascript excel

我正在尝试生成一个包含表情符号的Excel文件。生成excel文件后,我在Google电子表格中将其打开,可以正确显示表情符号。 (在“数字”中也可以),请参见预期的链接。

但是,当我在Ms.excel中打开该文件时:我得到了: actual

这是我传递给feedbackGenerator以生成上图中的excel文件的数据:

const renderTableHeader = titleArray => {
    let row = "";
    for (let i in titleArray) {
        row += titleArray[i] + ',';
    }
    row = row.slice(0, -1);
    row += '\r\n';
    return row;
}

const feedbackGenerator = (data) => {
    let arrData = typeof data !== 'object' ? JSON.parse(data) : data;
    let file = 'sep=,\r\n\n';

    const headerArray = ['Date', 'Feedback'];
    file += renderTableHeader(headerArray);

    for (let i = 0; i < arrData.length; i++) {
        let row = "";
        for (var index in arrData[i]) {
            row += '"' + arrData[i][index] + '",';
        }
        row.slice(0, row.length - 1);
        file += row + '\r\n';
    }

    const fileName = `feedback.xls`
    generateExcelFile(file, fileName)
};

const generateExcelFile = (file, fileName) => {

  let uri = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ;charset=utf-8,' + encodeURIComponent(file);

  let link = document.createElement("a");
  link.href = uri;

  link.style = "visibility:hidden";
  link.download = fileName;

  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};

const data = [
  {
    Date: '10 Jul 2019 09:41',
    Feedback: 'mencoba emoji ????????'
  },
  {
    Date: '10 Jul 2019 09:41',
    Feedback: 'test emoji lagi ???✌?✌????'
  }
]

// generate excel file
feedbackGenerator(data);

我希望表情符号能够正确显示。如果它显示为旧表情符号,那么它可以,只要它不是未知字符即可。

expected

1 个答案:

答案 0 :(得分:0)

您没有生成Excel文件!

您生成一个CSV文件,并将其扩展名为“ .xls”。如果您尝试打开这样的文件,Excel会报告错误。但是Excel的默认错误处理是将文件打开为CSV文件。但是,如果以这种方式打开文件,则Excel不允许您选择输入编码。

无法选择输入编码是您的问题。如果您以ANSI格式打开UTF-8输入,就会得到以下结果:

sep=,

Date,Feedback
"10 Jul 2019 09:41","mencoba emoji 😊😊😊😄😄😂😂😂",
"10 Jul 2019 09:41","test emoji lagi ðŸ˜ðŸ˜ðŸ˜âœŒðŸ¿âœŒðŸ¿ðŸ˜³ðŸ˜³ðŸ˜³",

这正是Excel的功能。

这意味着您必须将XLS标签的CSV文件编码为ANSI。但这是不可能的,因为无法在ANSI中对UTF-8表情符号进行编码。

因此,唯一的选择是生成CSV文件,并将其也称为CSV,以便将其导入Excel。 here说明了如何导入UTF-8 CSV。如果这样做,表情符号将正确呈现:

enter image description here