如果我们在nodeJS服务器上,我们可以编写一个头,设置一个mime类型,并发送它:
res.header("Content-Disposition", "attachment;filename="+name+".csv");
res.type("text/csv");
res.send(200, csvString);
Run Code Online (Sandbox Code Playgroud)
并且由于标题,浏览器将为命名的csv文件创建下载.
当在浏览器中生成有用的数据时,将其置于CSV文件中的一种解决方案是使用ajax,将其上传到服务器,(可选择将其保存在那里)并让服务器使用这些头将其发送回csv在浏览器下载回来.
但是,我希望100%的浏览器解决方案不涉及与服务器的乒乓.
所以在我看来,可以打开一个新窗口并尝试使用META标记等效设置标题.
但是这在最近的Chrome中对我不起作用.
我确实得到一个新窗口,它包含csvString,但不作为下载.
我想我希望在底部标签中下载或在底部标签中下载一个空白的新窗口.
我想知道元标记是否正确或是否还需要其他标记.
有没有办法让这项工作没有将其强加给服务器?
用于在浏览器中创建CSV的JsFiddle(不工作 - 输出窗口但无法下载)
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);
Run Code Online (Sandbox Code Playgroud) 我正在创建一个网页,其中的数据上传到 HTML 表。经过一些计算后,会生成一个输出 HTML 表。输出 HTML 表必须以 Excel ( .xlsx) 格式转储。我使用SheetJS库来上传和下载。
我尝试过以下代码,将数据导出到 Excel,无需任何格式。
计算后输出HTML:
<table border="1" id="tempTable">
<thead>
<tr>
<th style="border:1px solid #000000;border-collapse: collapse">Column1</th>
<th style="border:1px solid #000000;border-collapse: collapse">Column2</th>
<th style="border:1px solid #000000;border-collapse: collapse">Column3</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #000000;border-collapse: collapse">R1C1</td>
<td style="border:1px solid #000000;border-collapse: collapse">R1C2</td>
<td style="border:1px solid #000000;border-collapse: collapse">R1C3</td>
</tr>
<tr>
<td style="border:1px solid #000000;border-collapse: collapse">R2C1</td>
<td style="border:1px solid #000000;border-collapse: collapse">R2C2</td>
<td style="border:1px solid #000000;border-collapse: collapse">R2C3</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)