最近一个项目需要把报表的表格导入excel,在网上找了一些方法,比较研究了一下,记在这里,备忘。
表格例子如下:
代码如下 | 复制代码 |
<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td colspan="5" align="center">html 表格导出道Excel</td> </tr> <tr> <td>列标题1</td> <td>列标题2</td> <td>类标题3</td> <td>列标题4</td> <td>列标题5</td> </tr> <tr> <td>aaa</td> <td>bbb</td> <td>ccc</td> <td>ddd</td> <td>eee</td> </tr> <tr> <td>AAA</td> <td>BBB</td> <td>CCC</td> <td>DDD</td> <td>EEE</td> </tr> <tr> <td>FFF</td> <td>GGG</td> <td>HHH</td> <td>III</td> <td>JJJ</td> </tr> </table> |
1、js的方法
A、将整个表格拷贝到EXCEL中
代码如下 | 复制代码 |
function method1(tableid) { var curTbl = document.getElementById(tableid); } |
B、读取表格中每个单元到EXCEL中:
代码如下 | 复制代码 |
function method2(tableid) { var curTbl = document.getElementById(tableid); } } |
c、把表格输出到另一个页面,然后存成cvs格式
代码如下 | 复制代码 |
function getXlsFromTbl(inTblId, inWindow){ try { curStr = getTblData(inTblId, inWindow); } else { alert("你要导出的表不存在"); } catch(e) { alert("导出发生异常:" + e.name + "->" + e.description + "!"); } } function getTblData(inTbl, inWindow) { var rows = 0; if (!document.all(inWindow)) { else { } var curTbl = tblDocument.getElementById(inTbl); if (i == 0 && rows > 0) { outStr += curTbl.rows[j].cells[i].innerText + "t"; else { function getExcelFileName() { if (curDate.length == 1) { if (curHour.length == 1) { if (curMinute.length == 1) { if (curSecond.length == 1) { } function doFileExport(inName, inStr) { } |
总结:比较上面3种方法,感觉第一种方法比较完美一些,因为这种方法比较完整的输出表格的格式。但,第一和第二种方法都用了ActiveX 对象,对客户端的安全有要求,而且最大的问题还有一个,就是excel 对象无法关闭。第3中方法虽然没有用ActiveX 对象,但是用了弹出窗口输出, 如果禁止了弹出窗口则无法使用。
对于execl 对象无法关闭的问题,下面的方法是一个权宜方法:
代码如下 | 复制代码 |
function Cleanup() { window.clearInterval(idTmr); CollectGarbage(); } |
调用方法:
代码如下 | 复制代码 |
idTmr = window.setInterval("Cleanup();",1); |
2、Asp.net(c#)中的方法这种方法其实类似上面的js的第3中方法(也可以在其他的web脚本来实现,比如asp中vbscript,或者php),把表格用文件流的方式输出为excel。实例代码如下:public void OutPutExcel(string title)
代码如下 | 复制代码 |
{ Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(title + ".xls")); Response.ContentType = "application/ms-excel"; System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); this.Page.RenderControl(oHtmlTextWriter); string temp = oStringWriter.ToString(); Response.Write(temp); |
这种方法的从本质上说并非标准的excel格式,不过把html格式的文件另存为excel的格式,然后用excel打开罢了。3、利用ExceL Application或者MSOWC 或者ado.net