Javascript实现把网页中table的内容导入到excel中的几种方法

转:http://www.cublog.cn/u/23292/showart.php?id=162129

Javascript实现把网页中table的内容导入到excel中的几种方法

一、            直接拷贝整个表格到EXCEL中
二、            通过遍历表格,给EXCEL中相应的单元格赋值。
三、            把表格中的内容提取出来,利用IE的另存为.csv的格式。

各方法的好处:
1.      直接拷贝表格,能够保留表格中的原有的格式,比如,列,行的合并,对齐方式,底色等等,
2.      通过遍历表格,比较灵活,可以遍历表格某些需要部分的内容。
3.      利用IE的另存为,不用创建ActiveXObject对象,可以处理表格合并方面的问题。

各方法的缺点:
1.      可能弹出脚本错误:Automation不能创建对象。
解决方法:启用IE安全设置中的:对没有标记为安全的ActiveX控件进行初始化和脚本运行。
由于整个表格复制到EXCEL中,给表格加个标题,并加入到EXCEL中可能会遇到麻烦。
解决方法:首先在表格中加入第一行

<tr><td colspan="x" align="center">&</td></tr>
X,表示整个表格的列数,复制完整个表格后,加如下代码,oSheet为当前活动的sheet.
oSheet.Range(oSheet.Cells(1, 1), oSheet.Cells(1, x)).value = "表格标题";//设置标题
oSheet.Rows(1).Font.Size = 16;   //设置文字大小          
oSheet.Rows(1).Font.Name = "宋体";//设置文字字体
注:以下属性我没用着,可能有用,也可能会报错

oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).mergecells=true; //合并单元格
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).Interior.ColorIndex=6;//设置底色?
oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).Font.ColorIndex=5;//设置字体色?
oSheet.Rows(1).RowHeight=20; //设置列高
oSheet.Cells(iRow,iCol).Halignment=’2’//设置字体居中

2.      可能弹出脚本错误:Automation不能创建对象(解决方法如上)。
表格内容写入到EXCEL中无表格线(未解决)
且有单元格合并时会有问题,解决方法:合并单元格后再写数据。

oSheet.Range(oSheet.Cells(1,1), oSheet.Cells(1,14)).mergecells=true; //合并单元格


3.      表格内容写入到EXCEL中无表格线(未解决)

表格格式复杂时,会有问题,(rowspan>1 or colspan>1),解决方法:一般都是表头格式比较复杂,可先把表头写死,然后再循环写其他数据。

网页内容如下:(可直接拷贝到记事本,然后保存为html格式,用IE打开,有问题欢迎交流:joyleo@126.com)

Html代码 复制代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  2.   
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  4.   
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6.   
  7. <head>  
  8.     <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>  
  9.     <title>WEB页面导出为EXCEL文档的方法</title>  
  10. </head>  
  11. <body>  
  12. <table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0">  
  13.     <tr>  
  14.         <td colspan="5" align="center">WEB页面导出为EXCEL文档的方法</td>  
  15.     </tr>  
  16.     <tr>  
  17.         <td>列标题1</td>  
  18.         <td>列标题2</td>  
  19.         <td>列标题3</td>  
  20.         <td>列标题4</td>  
  21.         <td>列标题5</td>  
  22.     </tr>  
  23.     <tr>  
  24.         <td>aaa</td>  
  25.         <td>bbb</td>  
  26.         <td>ccc</td>  
  27.         <td>ddd</td>  
  28.         <td>eee</td>  
  29.     </tr>  
  30.     <tr>  
  31.         <td>AAA</td>  
  32.         <td>BBB</td>  
  33.         <td>CCC</td>  
  34.         <td>DDD</td>  
  35.         <td>EEE</td>  
  36.     </tr>  
  37.     <tr>  
  38.         <td>FFF</td>  
  39.         <td>GGG</td>  
  40.         <td>HHH</td>  
  41.         <td>III</td>  
  42.         <td>JJJ</td>  
  43.     </tr>  
  44. </table>  
  45. <input type="button" onclick="javascript:method1('tableExcel');" value="第一种方法导入到EXCEL">  
  46. <input type="button" onclick="javascript:method2('tableExcel');" value="第二种方法导入到EXCEL">  
  47. <input type="button" onclick="javascript:getXlsFromTbl('tableExcel',null);" value="第三种方法导入到EXCEL">  
  48.   
  49. <SCRIPT LANGUAGE="javascript">  
  50. function method1(tableid) {//整个表格拷贝到EXCEL中   
  51.     var curTbl = document.getElementById(tableid);   
  52.     var oXL = new ActiveXObject("Excel.Application");   
  53.     //创建AX对象excel   
  54.     var oWB = oXL.Workbooks.Add();   
  55.     //获取workbook对象   
  56.     var oSheet = oWB.ActiveSheet;   
  57.     //激活当前sheet   
  58.     var sel = document.body.createTextRange();   
  59.     sel.moveToElementText(curTbl);   
  60.     //把表格中的内容移到TextRange中   
  61.     sel.select();   
  62.     //全选TextRange中内容   
  63.     sel.execCommand("Copy");   
  64.     //复制TextRange中内容    
  65.     oSheet.Paste();   
  66.     //粘贴到活动的EXCEL中         
  67.     oXL.Visible = true;   
  68.     //设置excel可见属性   
  69. }   
  70.   
  71. function method2(tableid) //读取表格中每个单元到EXCEL中   
  72. {   
  73.     var curTbl = document.getElementById(tableid);   
  74.     var oXL = new ActiveXObject("Excel.Application");   
  75.     //创建AX对象excel   
  76.     var oWB = oXL.Workbooks.Add();   
  77.     //获取workbook对象   
  78.     var oSheet = oWB.ActiveSheet;   
  79.     //激活当前sheet   
  80.     var Lenr = curTbl.rows.length;   
  81.     //取得表格行数   
  82.     for (i = 0; i < Lenr; i++)   
  83.     {   
  84.         var Lenc = curTbl.rows(i).cells.length;   
  85.         //取得每行的列数   
  86.         for (j = 0; j < Lenc; j++)   
  87.         {   
  88.             oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;   
  89.             //赋值   
  90.         }   
  91.     }   
  92.     oXL.Visible = true;   
  93.     //设置excel可见属性   
  94. }   
  95.   
  96. function getXlsFromTbl(inTblId, inWindow) {   
  97.     try {   
  98.         var allStr = "";   
  99.         var curStr = "";   
  100.         //alert("getXlsFromTbl");   
  101.         if (inTblId != null && inTblId != "" && inTblId != "null") {   
  102.             curStr = getTblData(inTblId, inWindow);   
  103.         }   
  104.   
  105.         if (curStr != null) {   
  106.             allStr += curStr;   
  107.         }   
  108.         else {   
  109.             alert("你要导出的表不存在!");   
  110.             return;   
  111.         }   
  112.   
  113.         var fileName = getExcelFileName();   
  114.         doFileExport(fileName, allStr);   
  115.     }   
  116.     catch(e) {   
  117.         alert("导出发生异常:" + e.name + "->" + e.description + "!");   
  118.     }   
  119. }   
  120.   
  121. function getTblData(inTbl, inWindow) {   
  122.     var rows = 0;   
  123.     //alert("getTblData is " + inWindow);   
  124.     var tblDocument = document;   
  125.     if (!!inWindow && inWindow != "") {   
  126.         if (!document.all(inWindow)) {   
  127.             return null;   
  128.         }   
  129.         else {   
  130.             tblDocument = eval(inWindow).document;   
  131.         }   
  132.     }   
  133.   
  134.     var curTbl = tblDocument.getElementById(inTbl);   
  135.     var outStr = "";   
  136.     if (curTbl != null) {   
  137.         for (var j = 0; j < curTbl.rows.length; j++) {   
  138.             //alert("j is " + j);   
  139.             for (var i = 0; i < curTbl.rows[j].cells.length; i++) {   
  140.                 //alert("i is " + i);   
  141.                 if (i == 0 && rows > 0) {   
  142.                     outStr += " \t";   
  143.                     rows -1;   
  144.                 }   
  145.                 outStr += curTbl.rows[j].cells[i].innerText + "\t";   
  146.                 if (curTbl.rows[j].cells[i].colSpan > 1) {   
  147.                     for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {   
  148.                         outStr += " \t";   
  149.                     }   
  150.                 }   
  151.                 if (i == 0) {   
  152.                     if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {   
  153.                         rows = curTbl.rows[j].cells[i].rowSpan - 1;   
  154.                     }   
  155.                 }   
  156.             }   
  157.             outStr += "\r\n";   
  158.         }   
  159.     }   
  160.     else {   
  161.         outStr = null;   
  162.         alert(inTbl + "不存在!");   
  163.     }   
  164.     return outStr;   
  165. }   
  166.   
  167. function getExcelFileName() {   
  168.     var d = new Date();   
  169.     var curYear = d.getYear();   
  170.     var curMonth = "" + (d.getMonth() + 1);   
  171.     var curDate = "" + d.getDate();   
  172.     var curHour = "" + d.getHours();   
  173.     var curMinute = "" + d.getMinutes();   
  174.     var curSecond = "" + d.getSeconds();   
  175.   
  176.     if (curMonth.length == 1) {   
  177.         curMonth = "0" + curMonth;   
  178.     }   
  179.     if (curDate.length == 1) {   
  180.         curDate = "0" + curDate;   
  181.     }   
  182.     if (curHour.length == 1) {   
  183.         curHour = "0" + curHour;   
  184.     }   
  185.     if (curMinute.length == 1) {   
  186.         curMinute = "0" + curMinute;   
  187.     }   
  188.     if (curSecond.length == 1) {   
  189.         curSecond = "0" + curSecond;   
  190.     }   
  191.     
  192.     var fileName = "leo_zhang" + "_" + curYear + curMonth + curDate + "_" + curHour + curMinute + curSecond + ".csv";   
  193.     //alert(fileName);   
  194.     return fileName;   
  195. }   
  196.     
  197. function doFileExport(inName, inStr) {   
  198.     var xlsWin = null;   
  199.     if (!!document.all("glbHideFrm")) {   
  200.         xlsWin = glbHideFrm;   
  201.     }   
  202.     else {   
  203.         var width = 6;   
  204.         var height = 4;   
  205.         var openPara = "left=" + (window.screen.width / 2 - width / 2)   
  206.                 + ",top=" + (window.screen.height / 2 - height / 2)   
  207.                 + ",scrollbars=no,width=" + width + ",height=" + height;   
  208.         xlsWin = window.open("", "_blank", openPara);   
  209.     }   
  210.   
  211.     xlsWin.document.write(inStr);   
  212.     xlsWin.document.close();   
  213.     xlsWin.document.execCommand('Saveas', true, inName);   
  214.     xlsWin.close();   
  215. }   
  216.   
  217. </SCRIPT>  
  218. </body>  
  219. </html> 
原文地址:https://www.cnblogs.com/luqingfei/p/1881395.html