javascript - 前端导出excel - 前端生成文件




Javascript到csv导出编码问题 (4)

B4stien,谢谢你的回答! 在基于charset“utf8”测试了几个解决方案后,编码windows-1252是唯一能让我在Excel 365中保持重音的解决方案!

Manetsus,b4stien的回答和他的链接对我的情况非常有用:我必须将法语和德语数据导出到csv文件:没有基于“utf8”的解决方案已经有效...只有他的解决方案使用“ANSI”(窗口) -1252)编码器......

我给他的代码示例,你可以从链接下载依赖编码索引.js,encoding.js和FileSaver.js ...

    <!doctype html>
    <html>

    <head>
        <meta charset="utf-8">
        <script type="text/javascript" src="encoding-indexes.js"></script>
        <script type="text/javascript" src="encoding.js"></script>
        <script type="text/javascript" src="FileSaver.js"></script>
    </head>

    <body>
        <a href="#" id="download-csv">Click me to download a valid CSV !</a>

        <script type="text/javascript">
            var csvContent = 'éà; ça; 12\nà@€; çï; 13',
                textEncoder = new CustomTextEncoder('windows-1252', {NONSTANDARD_allowLegacyEncoding: true}),
                fileName = 'some-data.csv';

            var a = document.getElementById('download-csv');
            a.addEventListener('click', function(e) {
                var csvContentEncoded = textEncoder.encode([csvContent]);
                var blob = new Blob([csvContentEncoded], {type: 'text/csv;charset=windows-1252;'});
                saveAs(blob, fileName);
                e.preventDefault();
            });
        </script>
    </body>

    </html>

尽管如此,由于Excel在语言和格式的支持方面相对开放,我不排除我的开发环境中不支持UTF8,因为它的安装方式......

注意:我使用Excel 365在Windows 7上使用Firefox,Chrome和IE 11进行测试...

我需要将javascript数组导出到excel文件并下载它我在这段代码中执行它。 data是一个javascript对象数组。

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值进行导出?


Excel在检测编码时非常糟糕,特别是在OSX上的Excel。

最好的解决方案是使用默认的Excel编码对CSV进行编码:windows-1252(也称为ANSI,基本上是ISO-8859-1的子集)。

我在以下https://github.com/b4stien/js-csv-encoding了一个完整的示例: https://github.com/b4stien/js-csv-encodinghttps://github.com/b4stien/js-csv-encoding

两个主要部分是stringencoding (用于编码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');

不知何故发现带有utf-16le编码的Tab-Separated-CSV与BOM在WIN / MAC Excel上工作

遵循b4stien的回答,但存档有一点不同:

var csvContent = 'éà; ça; 12\nà@€; çï; 13',
    textEncoder = new TextEncoder('utf-16le');
var csvContentEncoded = textEncoder.encode([csvContent]);
var bom = new Uint8Array([0xFF, 0xFE]);
var out = new Uint8Array( bom.byteLength + csvContentEncoded.byteLength );
out.set( bom , 0 );
out.set( csvContentEncoded, bom.byteLength );
var blob = new Blob([out]);
saveAs(blob, 'some-data.csv');

使用Linux / usr / bin /文件测试:

Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators

您可以先添加BOM,使用此代码并尝试

var BOM = "\uFEFF"; 
var csvContent = BOM + csvContent;

然后用数据创建文件头:“text / csv; charset = utf-8”





export-to-csv