表格中数据比较多,一个一个单元格进行toString()操作也太慢了吧?
就是想通过Excel的copy命令将页面表格中的数据拷过来,可是出现了上面的问题
还是一个就是编号项(如:0001)在表格中的位置是不固定的

解决方案 »

  1.   

    在向Excel中写单元格时,先将单元格的格式定义为“文本”,xxx.NumberFormatLocal = "@";<HTML>
    <HEAD>
    <TITLE>将页面中指定表格的数据导入到Excel中</TITLE>
    <SCRIPT LANGUAGE="javascript"> 
    <!-- 
    function AutomateExcel() 
    { var oXL = new ActiveXObject("Excel.Application"); //创建应该对象 
    var oWB = oXL.Workbooks.Add();//新建一个Excel工作簿
    var oSheet = oWB.ActiveSheet;//指定要写入内容的工作表为活动工作表
    var table = document.all.data;//指定要写入的数据源的id
    var hang = table.rows.length;//取数据源行数
    var lie = table.rows(0).cells.length;//取数据源列数// Add table headers going cell by cell. 
    for (i=0;i<hang;i++){//在Excel中写行
      for (j=0;j<lie;j++){//在Excel中写列
        //定义格式
        oSheet.Cells(i+1,j+1).NumberFormatLocal = "@";
        //!!!!!!!上面这一句是将单元格的格式定义为文本
        oSheet.Cells(i+1,j+1).Font.Bold = true;//加粗
        oSheet.Cells(i+1,j+1).Font.Size = 10;//字体大小
        oSheet.Cells(i+1,j+1).value = table.rows(i).cells(j).innerText;//向单元格写入值
      } 

    oXL.Visible = true; 
    oXL.UserControl = true; 

    //-->
    </SCRIPT>
    </HEAD><BODY>
    <table border="0" width="300" id="data" bgcolor="black" cellspacing="1">
     <tr bgcolor="white">
      <td>编号</td>
      <td>姓名</td>
      <td>年龄</td>
      <td>性别</td>
     </tr>
     <tr bgcolor="white">
      <td>0001</td>
      <td>张三</td>
      <td>22</td>
      <td>女</td>
     </tr>
     <tr bgcolor="white">
      <td>0002</td>
      <td>李四</td>
      <td>23</td>
      <td>男</td>
     </tr>
    </table>
    <input type="button" name="out_excel" onclick="AutomateExcel();" value="导出到excel">
    </BODY>
    </HTML>
      

  2.   

    上面的方法“年龄”转到excel中应该是数值型,现在却是字符串了?
      

  3.   

    呵呵 
    最簡單解決這個問題的方法就是吧 00001寫成 ="00001" 
    可以完全解決問題 在excel裡顯示的就是00001
      

  4.   

    oSheet.Cells(i+1,j+1).NumberFormatLocal = "@";
      

  5.   

    beihua(水鸟) 
    上面的方法“年龄”转到excel中应该是数值型,现在却是字符串了?-----------------------------------
    可以在循环里加上判断,指定某列为字符型,其它的仍旧保持数值型。
    改成:
    if(j==0) oSheet.Cells(i+1,j+1).NumberFormatLocal = "@";
      

  6.   

    如果有的单元格是合并的话,上面的代码会出现“对象不存在”错误?
    单元格中的列数量和列名称(类型)是不确定,不好将某列固定为字符或数值类型?
    不知道能不能给每个单元格设置一个标签值然后再判断?
    还有这样输出到excel中的数据没有边框?
      

  7.   

    合并单元格这个倒从来没想过。
    如果每个单元格的数据类型不同的话,从数据库读数据的时候给td加个标识来区分数据类型,写入excel的时候再根据标识不同定义excel中的单元格格式。至于excel中的表格边框和定义字体一样,应该也可以定义吧
    具体方法,你可以参考excel中的宏:
    工具-->宏-->录制新宏,然后进行操作(比如给表格或单元格或行加边框),最后停止录制。用工具-->宏-->单步执行 来调出相应操作的代码,然后尝试将其转换为相应的JS代码。
      

  8.   

    合并单元格的话,估计得加上判断<tr>中的rowspan和<td>中的colspan吧。写入excel你再用录制宏看看excel中合并单元格怎么做的。
      

  9.   

    晕,太复杂了!算了,结帖吧!感谢yiran5467(依苒)
      

  10.   

    Click the link to solve your problem.Good luck!