如何使用 Javascript 创建和下载 csv 文件?

Posted

技术标签:

【中文标题】如何使用 Javascript 创建和下载 csv 文件?【英文标题】:How do I create and download a csv file using Javascript? 【发布时间】:2014-01-17 13:20:25 【问题描述】:

我在一个按钮中有这个代码:

var csvContent = "data:text/csv;charset=utf-8,";
csvContent += myCSVcontent;

var encodedUri = encodeURI(csvContent);
window.open(encodedUri);

这在 Chrome、Safari 和 Firefox 中完美运行。 - 但不是 IE8 - 我需要 Internet Explorer 8 兼容性。

当我单击调用上面代码的按钮时,它会将 .csv 文件下载到我的计算机上。 但是,当我单击 IE8 中的按钮时,它会打开一个新的 IE8 窗口,其中包含地址栏中的所有 csv 内容,并且不会下载(或要求下载)任何内容。

不幸的是,我必须兼容 IE8。我怎样才能做到这一点?

编辑:我必须避免对服务器进行任何额外的调用。一切都需要在客户端发生。这目前适用于除 IE8(可能还有 IE9)之外的所有浏览器。

Edit2:当我将最后一行更改为“document.location.href=encodedUri;”时它仍然可以在所有其他浏览器上运行,但是在 IE8 中,当我单击该按钮时,我得到一个错误窗口,上面写着“传递给系统调用的数据区域太小”。知道这告诉我什么吗?

【问题讨论】:

Utility of HTTP header "Content-Type: application/force-download" for mobile? 的可能重复项 在 Chrome 中,这被阻止为弹出窗口(至少在 v35 中是这样)。 【参考方案1】:

“数据:文本/csv;”是 html5,所以它不适用于 IE8,我可以使用 ActivexObject 解决这个问题,但是它将文件写入用户的桌面并且没有弹出窗口

var csv = new ActiveXObject("scripting.FileSystemObject");
var fLoc = csv.CreateTextFile(fileName);
fLoc.WriteLine(csvData);
fLoc.close();

【讨论】:

以上是关于如何使用 Javascript 创建和下载 csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用Javascript使用shinyjs将数据表导出为Shiny中的CSV

使用JavaScript下载csv文件

Javascript - 将 CSV 下载为文件

如何使用 JMeter 测试 xlsx/csv 和其他文件的下载过程?

如何创建用于将数据从伪造查看器下载为 CSV 格式的按钮

使用PHP在CSV服务器上创建和下载CSV文件