我有一个html文件:
<div id="tableDiv" style="display:none"></div>
里面有一段js:
   //生成table
                        var maxCol = 7; //需要生成的列数量
                        var strTbody = ["<table border='1' id='tb'><tbody>"];
                        var xl = 0;
                        
                        strTbody.push("<tr>");
                        strTbody.push("<td>序号</td>");
                        strTbody.push("<td>cTelNum</td>");
                        strTbody.push("<td>时间</td>");
                        strTbody.push("<td>位置</td>");
                        strTbody.push("<td>时速</td>");
                        strTbody.push("<td>里程</td>");
                        strTbody.push("</tr>");
                        
                        for (var v = 0; v < currentlen; v++) {
                            strTbody.push("<tr>");
                            var info = totalpoint[i][v].split(',');
                            var y = parseFloat(info[1]);
                            var x = parseFloat(info[0]);
                            var speed = info[2];
                            var TelNum = info[3];
                            var TrackTime = info[4];
                            
                            var geocoder = new GClientGeocoder();
                            var latlng = new GLatLng(y, x);
                            geocoder.getLocations(latlng, showAddress);                            if (addr == null || addr.length < 1 || addr == "") {
                                addr = y.toFixed(2) + ",  " + x.toFixed(2);
                            }
                            xl++;
                            strTbody.push("<td>" + xl + "</td>");
                            strTbody.push("<td>" + TelNum + "</td>");
                            strTbody.push("<td>" + TrackTime + "</td>");
                            strTbody.push("<td>" + addr + "</td>");
                            strTbody.push("<td>" + speed + "Km/h</td>");
                            strTbody.push("<td>" + (lc[i][v] / 1000).toFixed(2) + "Km</td>");
                            strTbody.push("</tr>");
                        }
                        strTbody.push("</tbody></table>");
                        var obj = document.getElementById("tableDiv");
                        obj.innerHTML = strTbody.join("");现在我要把这里动态生成的table导出Excel,不要用activex控件,请问该怎么办

解决方案 »

  1.   

    在网上找了很多资料都没有答案,最后实在没办法了,就把table导到html里了:
    function show() {
                    var w = window.open("aaa.htm");
                    w.document.open();
                    w.document.write(document.getElementById("tableDiv").innerHTML);
                    w.document.close();
                }请问该什么导出到Excel啊???????
      

  2.   

    邮箱给我我,给你发个完美导出EXCEL例子,可以把HTML导出到EXCEL
      

  3.   

    <script language=javascript>   
    function preview() {    
    window.clipboardData.setData("Text",document.all('table1').outerHTML);   
    try  
    {   
    var ExApp = new ActiveXObject("Excel.Application")   
    var ExWBk = ExApp.workbooks.add()   
    var ExWSh = ExWBk.worksheets(1)   
    ExApp.DisplayAlerts = false  
    ExApp.visible = true  
    }     
    catch(e)   
    {   
    alert("您的电脑没有安装Microsoft Excel软件!")   
    return false  
    }    
     ExWBk.worksheets(1).Paste;    
     }   
    </script> 
      

  4.   

    不用这个var ExApp = new ActiveXObject("Excel.Application")
    这个我用过了,客户不满意
      

  5.   


    Response.Clear();
                Response.Buffer = true;
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("销售记录统计表(" + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") + ")", System.Text.Encoding.UTF8) + ".xls");
                Response.ContentType = "application/ms-excel";
                Response.Charset = "GB2312";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                System.Text.StringBuilder writer = new System.Text.StringBuilder();
                //写表头
                writer.Append("客户名称");
                writer.Append("\t");//分隔符
                writer.Append("客户类型");
                writer.Append("\t");//分隔符
                writer.Append("销售日期");
                writer.Append("\t");
                writer.Append("产品名称");
                writer.Append("\t");
                writer.Append("数量");
                writer.Append("\t");
                writer.Append("单价");
                writer.Append("\t");
                writer.Append("金额");
                writer.Append("\n");//换行
                //写表的内容
                foreach (var item in data.ToList())
                {
                    writer.Append(item.Name);
                    writer.Append("\t");
                    writer.Append(item.TypeName);
                    writer.Append("\t");
                    writer.Append(item.SalesDate);
                    writer.Append("\t");
                    writer.Append(item.ProductName);
                    writer.Append("\t");
                    writer.Append(item.Amount);
                    writer.Append("\t");
                    writer.Append(item.Price);
                    writer.Append("\t");
                    writer.Append(item.TotalPrice);
                    writer.Append("\n");
                }
                Response.Write(writer.ToString());
                Response.End();可以这样生成,服务器上不需要安装EXCEL。
      

  6.   

    html文件中js生成的表的内容怎么传到服务器啊
      

  7.   

    /// <summary>
        /// 生成EXCEL文件
        /// _til是表格的标题,_row是表格的行数,_col是表格的列数,_dt是数据表,_filename是保存的EXCEL表的名称
        /// </summary>
        public void SaveToExcel(string _til, int _row, int _col, DataTable _dt, string _filename)
        {
            Microsoft.Office.Interop.Owc11.SpreadsheetClass xlsheet = new Microsoft.Office.Interop.Owc11.SpreadsheetClass();
            //合并单元格
            xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, _col]).set_MergeCells(true);
            // xlsheet.get_Range(xlsheet.Cells[2, 1], xlsheet.Cells[3, 2]).set_MergeCells(true);
            xlsheet.ActiveSheet.Cells[1, 1] = _til;
            //字体加粗
            xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, _col]).Font.set_Bold(true);
            //单元格文本水平居中对齐
            xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[_row + 2, _col]).set_HorizontalAlignment(Microsoft.Office.Interop.Owc11.XlHAlign.xlHAlignCenter);
            //设置字体大小
            xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[1, _col]).Font.set_Size(14);
            //设置列宽
            //xlsheet.get_Range(xlsheet.Cells[1, 3], xlsheet.Cells[1, 3]).set_ColumnWidth(50);        //画边框线
            xlsheet.get_Range(xlsheet.Cells[1, 1], xlsheet.Cells[_row + 2, _col]).Borders.set_LineStyle(Microsoft.Office.Interop.Owc11.XlLineStyle.xlContinuous);        //定义一个2维数组用来存储DATATABLE里的数据
            object[,] dataArray = new object[_row, _col];
            //添加列名
            for (int k = 0; k < _dt.Columns.Count; k++)
            {
                xlsheet.ActiveSheet.Cells[2, k + 1] = _dt.Columns[k].Caption.ToString();
            }
            //把DATATABLE里的数据导到2维数组中
            for (int i = 0; i < _row; i++)
            {
                for (int j = 0; j < _col; j++)
                {
                    dataArray[i, j] = _dt.Rows[i][j];
                }
            }
            //把2维数组中的数据导到EXCEL中
            xlsheet.get_Range("A3", xlsheet.Cells[_row + 2, _col]).Value2 = dataArray;
            xlsheet.Export(_filename, Microsoft.Office.Interop.Owc11.SheetExportActionEnum.ssExportActionNone, Microsoft.Office.Interop.Owc11.SheetExportFormat.ssExportXMLSpreadsheet);
        }
        /// <summary>
        /// 导入EXCEL表
        /// </summary>
        /// <param name="strFileName"></param>
        /// <returns></returns>
        public DataSet CreateDataSource(string strFileName, string Sqlstr)
        {
            string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName + "; Extended Properties=Excel 8.0;";
            OleDbConnection olecon = new OleDbConnection(strCon);
            OleDbDataAdapter myda = new OleDbDataAdapter(Sqlstr, olecon);
            DataSet myds = new DataSet();
            myda.Fill(myds);
            return myds;
        }
    这个可以我用过的。你看看行不?
      

  8.   

    不行吧,我这里没有DataTable,所有数据都是html文件中js动态生成的
      

  9.   


    <HTML>
      <HEAD>
        <title>WEB页面导出为EXCEL文档的方法
        </title>
      </HEAD>
    <body>
    <BR>
    <table id = "PrintA" width="100%" border="1" cellspacing="0" cellpadding="0" bgcolor = "#61FF13">
    <TR style="text-align : center;">
      <TD>1</TD>
      <TD>2</TD>
      <TD>2</TD>
      <TD>2</TD>
    </TR>
    <TR style="text-align : center;">
     <TD>单元格A</TD>
     <TD>单元格A</TD>
     <TD>单元格A</TD>
     <TD>单元格A</TD>
    </TR>
    <TR>
     <TD colSpan=4 style="text-align : center;"><font color="BLUE" face="Verdana">单元格合并行A</FONT></TD>
    </TR>
    </TABLE>
    <BR>
    <table id = "PrintB" width="100%" border="1" cellspacing="0" cellpadding="0">
    <TR style="text-align : center;">
     <TD>单元格B</TD>
     <TD>单元格B</TD>
     <TD>单元格B</TD>
     <TD>单元格B</TD>
    </TR>
    <TR>
     <TD colSpan=4 style="text-align : center;">单元格合并行B</TD>
    </TR>
    </TABLE>
    <br><br><br>
    <input type="button"  value="导出页面指定区域内容到Word">
    <input type="button"  value="导出页面指定区域内容到Excel">
    <input type="button"  value="导出表单单元格内容到Excel">
    <SCRIPT LANGUAGE="javascript">
     //指定页面区域内容导入Excel
     function AllAreaExcel() 
     {
      var oXL = new ActiveXObject("Excel.Application"); 
      var oWB = oXL.Workbooks.Add(); 
      var oSheet = oWB.ActiveSheet;  
      var sel=document.body.createTextRange();
      sel.moveToElementText(PrintA);
      sel.select();
      sel.execCommand("Copy");
      oSheet.Paste();
      oXL.Visible = true;
     }
     //指定页面区域“单元格”内容导入Excel
     function CellAreaExcel() 
     {
      var oXL = new ActiveXObject("Excel.Application"); 
      var oWB = oXL.Workbooks.Add(); 
      var oSheet = oWB.ActiveSheet; 
      var Lenr = PrintA.rows.length;
      for (i=0;i<Lenr;i++) 
      { 
       var Lenc = PrintA.rows(i).cells.length; 
       for (j=0;j<Lenc;j++) 
       { 
        oSheet.Cells(i+1,j+1).value = PrintA.rows(i).cells(j).innerText; 
       } 
      } 
      oXL.Visible = true; 
     }
     //指定页面区域内容导入Word
     function AllAreaWord()
     {
      var oWD = new ActiveXObject("Word.Application");
      var oDC = oWD.Documents.Add("",0,1);
      var oRange =oDC.Range(0,1);
      var sel = document.body.createTextRange();
      sel.moveToElementText(PrintA);
      sel.select();
      sel.execCommand("Copy");
      oRange.Paste();
      oWD.Application.Visible = true;
      //window.close();
     }
    </SCRIPT>
    </body></html> 
      

  10.   

     function ExportExcel() {
                    try 
                    {
                        var oXL = new ActiveXObject("Excel.Application"); //创建excel应用程序对象
                        var oWB = oXL.Workbooks.Add();        //创建工作簿
                        var oSheet = oWB.ActiveSheet;         //获取当前活动的工作簿               
                        var table = document.all.tb;        //获取当前页面中的表格
                        if (table != null) {
                            var hang = table.rows.length;         //获取表格有多少行                        if (hang > 0) {
                                var lie = table.rows(0).cells.length; //获取首行有多少列-多少标题                            for (i = 0; i < hang; i++)               //添加标题到表格中
                                {
                                    for (j = 0; j < lie; j++) {
                                        oSheet.Cells(i + 1, j + 1).Value = table.rows(i).cells(j).innerText; //设置标题的内容
                                    }
                                }
                                oXL.Visible = true; //设置Excel的属性
                                oXL.UserControl = true;
                            }
                        }
                        else {
                            alert('EXCEL为空');
                        }
                    }
                    catch (e) {
                        alert("使用此功能必须在先安装ActiveX控件,然后在浏览器中设置:Internet选项->安全->自定义级别->对未标记的ActiveX控件启用。");
                    }
                }一开始我就这样做的,被经理狠批了一顿