首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将javascript数据导出到CSV文件,而无需服务器交互

将javascript数据导出到CSV文件,而无需服务器交互
EN

Stack Overflow用户
提问于 2013-07-24 22:02:07
回答 5查看 137.4K关注 0票数 77

如果我们在nodeJS服务器上,我们可以写一个头,设置一个mime类型,然后发送它:

代码语言:javascript
复制
res.header("Content-Disposition", "attachment;filename="+name+".csv"); 
res.type("text/csv");
res.send(200, csvString);

由于这些头文件,浏览器将为命名的csv文件创建下载。

当在浏览器中生成有用的数据时,将其转换为CSV文件的一种解决方案是使用ajax,将其上传到服务器(也可以选择将其保存在那里),然后让服务器将其与这些头文件一起发送回去,以便在浏览器中将其作为csv下载文件。

然而,我想要一个100%的浏览器解决方案,不涉及乒乓与服务器。

因此,我想到可以打开一个新窗口,并尝试用META标签等效设置头。

但在最近的Chrome浏览器中,这并不适用于我。

我确实得到了一个新窗口,其中包含csvString,但不起下载的作用。

我想我希望在底部标签中获得下载,或者在底部标签中获得下载的空白新窗口。

我想知道meta标签是否正确,或者是否还需要其他标签。

有没有一种方法可以在不将其传递到服务器的情况下使其工作?

JsFiddle for Creating a CSV in the Browser (not working - outputs window but no download)

代码语言:javascript
复制
var A = [['n','sqrt(n)']];  // initialize array of rows with header row as 1st item
for(var j=1;j<10;++j){ A.push([j, Math.sqrt(j)]) }
var csvRows = [];
for(var i=0,l=A.length; i<l; ++i){
    csvRows.push(A[i].join(','));   // unquoted CSV row
}
var csvString = csvRows.join("\n");
console.log(csvString);
var csvWin = window.open("","","");
csvWin.document.write('<meta name="content-type" content="text/csv">');
csvWin.document.write('<meta name="content-disposition" content="attachment;  filename=data.csv">  ');
csvWin.document.write(csvString);
EN

回答 5

Stack Overflow用户

发布于 2014-12-30 10:51:37

@adeneo answer适用于Firefox和chrome...对于IE,可以使用以下内容。

代码语言:javascript
复制
if (window.navigator.msSaveOrOpenBlob) {
  var blob = new Blob([decodeURIComponent(encodeURI(result.data))], {
    type: "text/csv;charset=utf-8;"
  });
  navigator.msSaveBlob(blob, 'FileName.csv');
}

票数 31
EN

Stack Overflow用户

发布于 2014-07-14 11:28:28

请看adeneo的答案,但不要忘记encodeURIComponent

代码语言:javascript
复制
a.href     = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csvString);

另外,我需要使用"\r\n“而不仅仅是"\n”作为行分隔符。

代码语言:javascript
复制
var csvString = csvRows.join("\r\n");

修订小提琴:http://jsfiddle.net/7Q3c6/

票数 15
EN

Stack Overflow用户

发布于 2015-01-04 08:39:28

一旦我将JS代码打包到一个很小的库中:

https://github.com/AlexLibs/client-side-csv-generator

Github上提供了代码、文档和演示/游乐场。

享受:)

欢迎拉取请求。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17836273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档