这是我以前做过的,很不满意。
<html>
<head>
<title>查询结果</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head><body>
<input type=button value="表格另存为Excel表格">
<table id="AutoNumber1" border="1">
  <tr> 
    <td colspan="14"  align="center">单位项目</td>
  </tr>
  <tr> 
    <td rowspan="2" align="center">姓名</td>
    <td rowspan="2" align="center">性别</td>
    <td colspan="2" align="center"><a href="#">项目一</a></td>
    <td colspan="2" align="center"><a href="#">项目二</a></td>
    <td colspan="2" align="center"><a href="#">项目三</a></td>
    <td colspan="2" align="center"><a href="#">项目四</a></td>
    <td colspan="2" align="center"><a href="#">项目五</a></td>
    <td colspan="2" align="center"><a href="#">项目六</a></td>
  </tr>
  <tr> 
    <td align="center">A</td>
    <td align="center">B</td>
    <td align="center">A</td>
    <td align="center">B</td>
    <td align="center">A</td>
    <td align="center">B</td>
    <td align="center">A</td>
    <td align="center">B</td>
    <td align="center">A</td>
    <td align="center">B</td>
    <td align="center">A</td>
    <td align="center">B</td>
  </tr>
  <tr> 
    <td align="center">张三</td>
    <td align="center">男</td>
    <td align="center">112</td>
    <td align="center">22</td>
    <td align="center">333</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
  </tr>
</table>
<!--//这是我以前做过的,很不满意。-->
<iframe src="" name=show style="width:0;height:0"></iframe>
<script language="javascript">
var currentpos,timer; 
function initialize() 

timer=setInterval('scrollwindow()',10);

function sc(){
clearInterval(timer);
}
function scrollwindow() 

currentpos=document.body.scrollTop; 
window.scroll(0,++currentpos); 
if (currentpos != document.body.scrollTop) 
sc();

document.onmousedown=sc
document.ondblclick=initialize

show.document.write(AutoNumber1.outerHTML);function SaveAsMe() {
    try
    { show.document.execCommand ("SaveAs",true,"成绩统计结果.xls");}
    catch(e)
    {     alert("您的浏览器版本太低,请升级您的浏览器!");}
}
</script><!--//这是我以前做过的,很不满意。-->
</body>
</html>

解决方案 »

  1.   

    <object ID="WebBrow" WIDTH="1" HEIGHT="1" CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" VIEWASTEXT></object> 
    <script Language="VbScript">
    sub OpenHtmlWithExcel()
    Dim lngRows
    Dim intCols 
    Dim strRange
    Dim lngGridRow
    Dim i 
    Dim j 
    Dim blnExitFor
    'On Error Resume Next
    '选定整个网页
    call WebBrow.ExecWB(17,0)
    '复制网页到剪切板
    call WebBrow.ExecWB(12,0)
    '清除对网页的选定
    call WebBrow.ExecWB(18,0)
    blnExitFor=False
    Set objExcel=CreateObject("Excel.Application")
    With objExcel
    .DisplayAlerts = False
    .Workbooks.Add
    .Visible = True
    .ActiveWorkbook.ActiveSheet.Paste
        .ActiveWindow.DisplayGridlines = False
    lngRows = .Selection.Rows.Count
    intCols = .Selection.Columns.Count
    '修改标题
    For i = 1 To lngRows
    If blnExitFor=True Then Exit For
    For j = 1 To intCols
    If j > 26 Then
        If j Mod 26 = 0 Then
            strRange = Chr(64 + j \ 26 - 1) & "Z" & i
        Else
            strRange = Chr(64 + j \ 26) & Chr(64 + j Mod 26) & i
        End If
    Else
        strRange = Chr(64 + j) & i
    End If
    If .Range(strRange).Font.Size > 12 Then
    strRange = "1:" & i - 1
    '删除标题以上行
    .Rows(strRange).Delete xlUp
    strRange = "A1:" & Chr(64 + intCols) & 1
    '合并标题行单元格
    .Range(strRange).Merge
    strRange = "1:1"
    '标题行自动适应高度
    .Rows(strRange).EntireRow.AutoFit
    '重新计算行数
    lngRows = lngRows -i+1
    strRange = "2:" & lngRows
    '定义标题以下所有行高
    .Rows(strRange).RowHeight = 15
    blnExitFor =True
    Exit For
        End If
    Next 
    Next
    '计算画线开始行
    blnExitFor=False
    For i = 1 To lngRows
    If blnExitFor=True Then Exit For
    For j = 1 To intCols
    If j > 26 Then
        If j Mod 26 = 0 Then
            strRange = Chr(64 + j \ 26 - 1) & "Z" & i
        Else
            strRange = Chr(64 + j \ 26) & Chr(64 + j Mod 26) & i
        End If
    Else
        strRange = Chr(64 + j) & i
    End If
    If Left(.Range(strRange).Text,4)="报表时间" Or Right(.Range(strRange).Text,1)="元" Then
    lngGridRow=i
    blnExitFor =True
    'strRange = "B" & i
    '.Range(strRange).Cut
    'strRange = Chr(64 + intCols) & i
    '.Range(strRange).Select
    '.ActiveSheet.Paste
    'strRange ="A" & i & ":" &  Chr(63 + intCols) & i
    '.Range(strRange).Merge
    Exit For
    End If
    Next 
    Next
    '自动适应列宽
    If intCols > 26 Then
        If intCols Mod 26 = 0 Then
            strRange = "A:" & Chr(64 + intCols \ 26 - 1) & "Z" 
        Else
            strRange = "A:" & Chr(64 + intCols \ 26) & Chr(64 + intCols Mod 26)
        End If
    Else
        strRange = "A:" & Chr(64 + intCols)
    End If
    .Columns(strRange).EntireColumn.AutoFit
    '为网格画线
    if Err.Description<>"" then
    Err.Clear 
    end if
    If intCols > 26 Then
        If intCols Mod 26 = 0 Then
            strRange = "A" & i & ":" & (64 + intCols \ 26 - 1) & "Z" & lngRows
        Else
            strRange = "A" & i & ":" & Chr(64 + intCols \ 26) & Chr(64 + intCols Mod 26) & lngRows
        End If
    Else
        strRange =  "A" & i & ":" & Chr(64 + intCols)
    End If
    .Range(strRange).Font.Size=10
    .Range(strRange).Borders.LineStyle = xlContinuous
    .Range(strRange).Borders.ColorIndex = xlAutomatic
    for i=2 to .ActiveSheet.Shapes.Count
    if i=.ActiveSheet.Shapes.Count then
    strShapes=strShapes & "Picture " & i
    else
    strShapes=strShapes & "Picture " & i & ","
    end if
    next
    .Range("A1").Select
    End With
       '显示文件
    if Err.Description<>"" then
    Err.Clear 
    Set objExcel = Nothing
    end if
    end sub
    </script>
      

  2.   


    To fujiachun(傅加淳)你贴的这堆东西有什么用?怎么用呀?你不要光贴代码呀,最起码要让我明白怎么去测试你的东西表格保存到客户端Excel文件的代码网上其实很多,但用起来很多都不怎么顺手,所以才发这个贴子我的目的是要用一个很简单的办法将一个任意复杂的表格保存成Excel文件,我并不要求大家一定要将我上面的那个表格通过点击按钮来保存成Excel文件,但我渴望看到类似的复杂表格保存为Excel文件的应用例子
      

  3.   

    JS偶弱...HOHO...
    用ASP导应该可以
      

  4.   


    TO kkkbs(邂逅浪漫) ASP 导出的也行啊,只要能保存到本地客户端,而且不在服务器端留下大量的垃圾文件就行。
      

  5.   

    用ExcelWrite很簡單的。
    用Asp應該也可以.
      

  6.   

    用OWC的 Export() 方法呀:
    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>dictlist</title><script language="VBScript">
    </script><script language="JavaScript">
    <!--
    var e;
    function Spreadsheet_Setting()  //电子表格的基本设置
    {
      e = document.all.MzSpreadsheet;
      e.DataType = "HTMLData";  //指定表格数据源类型
      e.HTMLData = document.all.data.innerHTML;  //这句给控件一个数据源
      e.DisplayColHeaders = 0;  //列标题行
      e.DisplayRowHeaders = 0;  //行号列
      //e.titlebar.Caption  = "所存字典列表";  //电子表格标题
      e.titlebar.visible  = 1;  //标题是否显示
      e.displaytoolbar    = 0;  //工具栏是否显示  var c = e.Constants;
      e.Range("c2").FreezePanes(c.ssFreezeTop);  //冻结行
      e.Range("c2").FreezePanes(c.ssFreezeLeft); //冻结列  e.Rows(1).Font.Bold = true;
      e.Rows(1).Font.Color = "red";
      e.Columns(1).Font.Bold = true;  //e.width  = document.body.clientWidth;     //设置电子表格对象宽
      //e.height = document.body.clientHeight-25; //设置电子表格对象高
      //e.AutoFit = false;  var ur = e.ActiveSheet.UsedRange;
      ur.Font.size = "11";
      ur.AutoFitRows();
      ur.AutoFitColumns();  //自适应列宽显示  //e.Cells.Locked = True  //e.Columns(1).Locked = true;
      //e.Rows(1).Locked = true;
      //e.ActiveSheet.Protection.Enabled = True    //saveOldData()}
    window.onload = function()
    {
      Spreadsheet_Setting();
    }function save()
    {
      var e = document.all.MzSpreadsheet;
      var ss= e.Constants;
      e.ActiveSheet.Export("mm.xls", ss.ssExportActionNone);//, ss.SheetExportActionEnum
    }//-->
    </SCRIPT></head>
    <body style="overflow:hidden; margin: 0px">
      <table border=0 cellpadding=0 cellspacing=0 width="100%" height="100%">
        <tr>
          <td>
            <OBJECT id=MzSpreadsheet height="100%" width="100%"
              classid="clsid:0002E510-0000-0000-C000-000000000046">
                <param name="DisplayColHeaders" value="-1">
                <param name="DisplayGridlines" value="-1">
                <param name="DisplayHorizontalScrollBar" value="-1">
                <param name="DisplayRowHeaders" value="-1">
                <param name="DisplayToolbar" value="0">
                <param name="DisplayVerticalScrollBar" value="-1">
                <param name="EnableAutoCalculate" value="-1">
                <param name="EnableEvents" value="-1">
                <param name="MoveAfterReturn" value="-1">
                <param name="MoveAfterReturnDirection" value="0">
                <param name="RightToLeft" value="0">
                <param name="ViewableRange" value="1:65536"></OBJECT>
          </td>
        </tr>
        <tr>
          <td height=30>
            <table width="100%" border=0 id=mytable>
              <tr>
                <td align=center> <input type="button" name="b1" value=" 保存 " onclick="save()">
              </tr>
            </table>
            <div id=data style="display: none">
              <table  border="1">
                <tr> 
                  <td colspan="14"  align="center">单位项目</td>
                </tr>
                <tr> 
                  <td rowspan="2" align="center">姓名</td>
                  <td rowspan="2" align="center">性别</td>
                  <td colspan="2" align="center"><a href="#">项目一</a></td>
                  <td colspan="2" align="center"><a href="#">项目二</a></td>
                  <td colspan="2" align="center"><a href="#">项目三</a></td>
                  <td colspan="2" align="center"><a href="#">项目四</a></td>
                  <td colspan="2" align="center"><a href="#">项目五</a></td>
                  <td colspan="2" align="center"><a href="#">项目六</a></td>
                </tr>
                <tr> 
                  <td align="center">A</td>
                  <td align="center">B</td>
                  <td align="center">A</td>
                  <td align="center">B</td>
                  <td align="center">A</td>
                  <td align="center">B</td>
                  <td align="center">A</td>
                  <td align="center">B</td>
                  <td align="center">A</td>
                  <td align="center">B</td>
                  <td align="center">A</td>
                  <td align="center">B</td>
                </tr>
                <tr> 
                  <td align="center">张三</td>
                  <td align="center">男</td>
                  <td align="center">112</td>
                  <td align="center">22</td>
                  <td align="center">333</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                </tr>
                <tr> 
                  <td align="center">李四</td>
                  <td align="center">女</td>
                  <td align="center">555;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">254</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                </tr>
                <tr> 
                  <td align="center">杨五</td>
                  <td align="center">女</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">554</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                  <td align="center">&nbsp;</td>
                </tr>
              </table>
            </div>
          </td>
        </tr>
      </table>
    </body></html>
      

  7.   

    set  objExcelApp  =  CreateObject("Excel.Application")  ----->改成activexobject
    objExcelApp.DisplayAlerts  =  false                       
    objExcelApp.Application.Visible  =  true  
    strAddr  =  Server.MapPath("book1.xls.")  
    objExcelApp.WorkBooks.Open(strAddr) ------》可以打开一个空的
    set  objExcelBook  =  objExcelApp.ActiveWorkBook  
    set  objExcelSheets  =  objExcelBook.Worksheets  
    set  objExcelSheet  =  objExcelBook.Sheets(1)
      

  8.   

    首先,很感谢梅老大关注三贴,我发这个贴的目的,就是想找到我自认为最佳的方法,所以伙伴们贴出的方法越多,当然就是越好,可选择的越多嘛。    梅老大,不知你有没有留意到,用你的方法产生的“xls”文件,其实其本质还是“Html”文件,不同之处只在于扩展名而已,而且连脚本、Css样式等等所有代码都被包含了进去。    如此一来,其效果可能就不如我前面用过的那个方法了  (见下附代码) ,代码很少,只需10行就可解决了问题,也不包含表格以外的元素。
    不过声明,这个代码不是我原创的,我也是从别人那里学过来的 :)<iframe src="" name=show style="width:0;height:0"></iframe>
    <script language="javascript">
    show.document.write(AutoNumber1.outerHTML);
    function SaveAsMe() {
        try
        { show.document.execCommand ("SaveAs",true,"成绩统计结果.xls");}
        catch(e)
        {     alert("您的浏览器版本太低,请升级您的浏览器!");}
    }
    </script>
      

  9.   

    用activex吧。虽然代码有点多,但是比较容易看懂。
    <script language=javascript>
    var excelObj;
    var $Table;
    function ToExcel(resultTable){
      var rows,cols;
      var i,j;
      $Table=document.all(resultTable);
      rows=$Table.rows.length;
      if(rows>0){
      try { 
        cols=$Table.rows(0).children.length;
        excelObj = new ActiveXObject("Excel.Application");
        excelObj.Visible = true;
        excelObj.WorkBooks.Add;
        for(i=1;i<=rows;i++)
         for(j=1;j<=cols;j++){
           fillInExcel(i,j,$Table.rows(i-1).children(j-1).innerText);
         }
      } catch(e) {alert("Fail to create the Excel document!");}  
      }
      else{
        alert("no data");}
    }
    function fillInExcel(row,col,value){
      excelObj.Cells(row, col).Value=value;
    }
    </script>
      

  10.   

    那天忘说了,取得vba的权限,是在运行里输入dcomcnfg,在dcom里查找excel文档,选交互,并在安全里把权限加上