我需要将javascript数组导出到excel文件并下载它,我正在此代码中执行此操作。数据是一个脚本对象数组。
var csvContent = "data:text/csv;charset=utf-8,";
data.forEach(function(dataMember, index)
{
dataString = dataMember.join(",");
csvContent += index < data.length ? dataString+ "\n" : dataString;
});
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "upload_data" + (new Date()).getTime() + ".csv");
link.click();
所有这些都很好,直到我有了非英语字符的字符串属性,比如西班牙语、阿拉伯语或希伯来语。如何使用所有这些非ASCII值进行导出?
您应该在文本开头添加UTF-8 BOM,如下所示:
var csvContent = "data:text/csv;charset=utf-8,%EF%BB%BF" + encodeURI(csvContent);
它对我来说适用于Excel 2013。
演示小提琴
您可以首先添加BOM,使用此代码并尝试
var BOM = "\uFEFF";
var csvContent = BOM + csvContent;
然后用数据“text/csv;charset=utf-8”将文件头装箱
Excel真的不擅长检测编码,尤其是OSX上的Excel。
最好的解决方案是用默认的Excel编码对CSV进行编码:Windows-1252(也称为ANSI,它基本上是ISO-8859-1的子集)。
我在以下位置给出了一个完整的示例:https://github.com/b4stien/js-csv-encoding.
两个主要部分是字符串编码(在windows-1252中编码CSV的内容)和FileSaver.js(下载生成的Blob)。
它看起来像:
var csvContent = 'éà; ça; 12\nà@€; çï; 13',
textEncoder = new TextEncoder('windows-1252');
var csvContentEncoded = textEncoder.encode([csvContent]);
var blob = new Blob([csvContentEncoded], {type: 'text/csv;charset=windows-1252;'});
saveAs(blob, 'some-data.csv');