jQuery表格到CSV导出
我正在使用CSV插件的jQuery表。 我修改了popup窗口,告诉浏览器下载一个CSV文件。
它是:
function popup(data) { var generator = window.open('', 'csv', 'height=400,width=600'); generator.document.write('<html><head><title>CSV</title>'); generator.document.write('</head><body >'); generator.document.write('<textArea cols=70 rows=15 wrap="off" >'); generator.document.write(data); generator.document.write('</textArea>'); generator.document.write('</body></html>'); generator.document.close(); return true; }
我已经将其更改为:
function popup(data) { window.location='data:text/csv;charset=utf8,' + encodeURIComponent(data); return true; }
它的工作,大部分。 它仍然需要你find你的电子表格软件,并创build自己的文件名…因为它创build了一个奇怪的文件名(例如:14YuskG_.csv.part)。
有关如何改善这一点的任何build议?
find了一个可行的解决scheme(在http://www.topsemtips.com/2008/11/save-html-table-to-excel-using-jquery/的帮助下):;
我改变了function:
function popup(data) { $("#main div.inner").append('<form id="exportform" action="export.php" method="post" target="_blank"><input type="hidden" id="exportdata" name="exportdata" /></form>'); $("#exportdata").val(data); $("#exportform").submit().remove(); return true; }
并创build了文件export.php:
<?php header("Content-type: application/vnd.ms-excel; name='excel'"); header("Content-Disposition: filename=export.csv"); header("Pragma: no-cache"); header("Expires: 0"); print $_REQUEST['exportdata']; ?>
更新:更多的IE7友好版本:
<?php header('Content-Type: application/force-download'); header('Content-disposition: attachment; filename=filename.csv'); print $_POST['exportdata']; ?>
感谢您的问题和答案,为我工作得很好。 下面是我使用的解决scheme的(几乎相同的)ASP.Net版本:
将table2CSV.jspopup式函数更改为:
function popup(data) { $("body").append('<form id="exportform" action="CsvExport.ashx" method="post" target="_blank"><input type="hidden" id="exportdata" name="exportdata" /></form>'); $("#exportdata").val(data); $("#exportform").submit().remove(); return true; }
注意到从export.php更改为.ashx通用处理程序。
通用处理程序代码:
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "application/force-download"; context.Response.AddHeader("content-disposition", "filename=filename.csv"); context.Response.Write(context.Request.Form["exportdata"]); }
我不build议这样“下载”CSV数据。 IE7只允许在地址栏中最多包含2000个字符,因此您的文件被截断的几率很高。
不兼容所有浏览器,但不需要服务器端! 使用JSFiddle尝试下面的代码,并告诉我们它是否在浏览器中运行。
$('<a></a>') .attr('id','downloadFile') .attr('href','data:text/csv;charset=utf8,' + encodeURIComponent(data)) .attr('download','filename.csv') .appendTo('body'); $('#downloadFile').ready(function() { $('#downloadFile').get(0).click(); });
我强烈build议使用http://datatables.net/extras/tabletools/ ,这使得很容易玩桌子