• 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> 
  • 相关阅读:
    Oracle修改字段类型
    JS解析JSON字符串
    C#Json转DataTable
    解决前台和后台传值出现中文乱码
    Oracle 存储过程简单语法
    EasyUI 冻结列
    EasyUI 数据网格行过滤
    windows计划任务
    C#日志文件
    bat 读取 ini 配置文件
  • 原文地址:https://www.cnblogs.com/luqingfei/p/1881395.html
Copyright © 2020-2023  润新知