我正在尝试生成一个包含表情符号的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);
我希望表情符号能够正确显示。如果它显示为旧表情符号,那么它可以,只要它不是未知字符即可。
答案 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。如果这样做,表情符号将正确呈现: