web生成excel
- 2014-08-08 22:40:00
- CJL 原创
- 11717
web导出excel文件的几种方法(本节部分内容引自http://www.douban.com/note/204285291/ )
1.服务器生成。
poi/jxl, jacob/jawin生成的是excel的biff格式。html/csv的是文本格式,不另存为excel文件,很多excel功能是用不了的。jacob/jawin需要服务器端是windows系统,且安装了excel2000以上版本。poi/jxl和html/csv方式的话,服务器端可以跨平台。
2.浏览器生成。
(1)activex方式:使用js/vbs调用excel对象,http://setting.javaeye.com/blog/219302,有个extjs的gridpanel导出为excel的例子。(ie+excel)。
(2)ie命令方式:将html或是csv输出到open的window,然后使用execCommand的saveas命令,存为csv或xls。 (ie6 only)。
(3)服务器端中转方式:将html的table或是拼接的csv传到服务器端,服务器端再按照Content-Type:application/vnd.ms-excel返回,浏览器就会按excel方式处理。与服务器端拼接相比,少了一次取数操作。(all)。
(4)data协议方式:对于支持data协议的浏览器,可以将html或是csv先用js base64处理,然后前缀data:application/vnd.ms-excel;base64,,即可使浏览器将其中的数据当做excel来处理,浏览器将提示下载或打开excel文件,可惜的是ie6不支持。extjs的官网有一个grid的plugin,实现导出xhtml格式的伪excel文件,就是这么做的。(IE 6不支持)。
下面介绍第四种浏览器生成方式。
原理:(1)浏览器的data协议:打开 data:text/html;ascii,<html><title>hello</title><body>world</body></html> 会生成一个网页。详细介绍见:http://www.keakon.net/2010/02/02/%E5%8E%9F%E6%9D%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E8%BF%98%E6%94%AF%E6%8C%81dataURI%E5%8D%8F%E8%AE%AE。
(2)JS可以根据json数据操作table对象生成包含table的网页。详细见:http://www.blogjava.net/caizh2009/articles/279953.html 。
(3)网页可以保存为excel。只包含table的网页可以很方便的转换为伪excel。
导出样例: exportToExcel.zip
在线样例:下面只是一个data协议的url在浏览器地址栏里打开它会生成一个只包含table的网页并修改文件类型头保存为伪excel。
data:application/vnd.ms-
excel;base64,PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB
4bWxuczp4PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIgeG1sbnM9Imh0dHA6Ly93d3c
udzMub3JnL1RSL1JFQy1odG1sNDAiPjxoZWFkPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPjx4OkV4Y2VsV29ya2J
vb2s+PHg6RXhjZWxXb3Jrc2hlZXRzPjx4OkV4Y2VsV29ya3NoZWV0Pjx4Ok5hbWU
+V29ya3NoZWV0PC94Ok5hbWU
+PHg6V29ya3NoZWV0T3B0aW9ucz48eDpEaXNwbGF5R3JpZGxpbmVzLz48L3g6V29ya3NoZWV0T3B0aW9ucz48L3g
6RXhjZWxXb3Jrc2hlZXQ
+PC94OkV4Y2VsV29ya3NoZWV0cz48L3g6RXhjZWxXb3JrYm9vaz48L3htbD48IVtlbmRpZl0tLT48bWV0YSBodHR
wLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI
+PC9oZWFkPjxib2R5Pjx0YWJsZSBzdHlsZT0id2lkdGg6ODAwcHgiPjx0ciBpZD0iMCI
+PHRkIGlkPSIwLzAiIHN0eWxlPSJ3aWR0aDogMTAwcHg7Ij7lp5PlkI08L3RkPjx0ZCBpZD0iMC8xIiBzdHlsZT0
id2lkdGg6IDIwMHB4OyI
+5oCn5YirPC90ZD48dGQgaWQ9IjAvMiIgc3R5bGU9IndpZHRoOiAzMDBweDsiPuWHuueUn+aXpeacnzwvdGQ
+PHRkIGlkPSIwLzMiIHN0eWxlPSJ3aWR0aDogNDAwcHg7Ij7nsY3otK88L3RkPjwvdHI
+PHRyIGlkPSIxIj48dGQgaWQ9IjEvMCI+5p2O5ZubPC90ZD48dGQgaWQ9IjEvMSI
+5aWzPC90ZD48dGQgaWQ9IjEvMiI
+MjAxMS0yLTE8L3RkPjx0ZCBpZD0iMS8zIj7lsbHkuJzpnZLlsps8L3RkPjwvdHI
+PHRyIGlkPSIyIj48dGQgaWQ9IjIvMCI+546L5LqUPC90ZD48dGQgaWQ9IjIvMSI
+55S3PC90ZD48dGQgaWQ9IjIvMiI
+MjAxMi0xLTE8L3RkPjx0ZCBpZD0iMi8zIj7lsbHkuJzmtY7lroE8L3RkPjwvdHI
+PHRyIGlkPSIzIj48dGQgaWQ9IjMvMCI+6LW15YWtPC90ZD48dGQgaWQ9IjMvMSI
+5aWzPC90ZD48dGQgaWQ9IjMvMiI
+MjAxMi0yLTI8L3RkPjx0ZCBpZD0iMy8zIj7lsbHkuJznnIHmtY7ljZfluII8L3RkPjwvdHI
+PC90YWJsZT48L2JvZHk+PC9odG1sPg==