下面是在网上找的一段js导excel代码,我做了一些改动。
    function htmlToExcel(elTableOut,elDiv){   
    try{   
        //设置导出前的数据,为导出后返回格式而设置   
        var elDivStrBak = elDiv.innerHTML;   
        //设置table的border=1,这样到excel中就有表格线
        elTableOut.border=1;   
        //过滤elDiv内容   
        var elDivStr = elDiv.innerHTML;   
        elDivStr = replaceHtml(elDivStr,"<A",">");   
        elDivStr = replaceHtml(elDivStr,"</A",">");   
        elDiv.innerHTML=elDivStr;
        var oRangeRef = document.body.createTextRange();   
        oRangeRef.moveToElementText( elDiv );   
        oRangeRef.execCommand("Copy");   //复制内容到剪切板
           
        //返回格式变换以前的内容   
        elDiv.innerHTML = elDivStrBak;   
        //内容数据可能很大,所以赋空   
        elDivStrBak = "";   
        elDivStr = "";   
        try {
          var oXL = new ActiveXObject("Excel.Application") 
        }
        catch(e) {
          alert( "需要安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。");
            return "";
        }
        var oWB = oXL.Workbooks.Add ;   
        var oSheet = oWB.ActiveSheet ;   
        oSheet.Paste();   
//        oSheet.Cells.NumberFormatLocal = "@";#,##0.00
        oSheet.Columns("A:A").ColumnWidth=35;
        oSheet.Columns("B:B").ColumnWidth=10;
        oSheet.Columns("C:C").ColumnWidth=35;
        oSheet.Columns("D:D").ColumnWidth=10;
        oSheet.Columns(1).NumberFormatLocal="@";
        oSheet.Columns(3).NumberFormatLocal="@";
        oSheet.Columns(2).NumberFormatLocal="0.00";//设置格式
        oSheet.Columns(4).NumberFormatLocal="0.00";
//        oXL.Visible = true;
//        oXL.UserControl = true;
        var fileName;
//        do{
            fileName = oXL.Application.GetSaveAsFilename("save.xls", "Excel Spreadsheets (*.xls), *.xls");
//        }while(fileName==null||fileName=="")
        oWB.SaveAs(fileName);
        
        oXL.DisplayAlerts = "False";
        oXL.Quit();
        oXL = null;
        oSheet = null;   
        oWB = null;
        idTmr = window.setInterval("Cleanup();",1000); //回收内存
    }catch(e){
        oXL = null;
        oSheet = null;   
        oWB = null;
        alert(e.description)
        oXL.DisplayAlerts = "False";
        oXL.Quit();
        CollectGarbage();
    }
}
function Cleanup() { 
window.clearInterval(idTmr); 
CollectGarbage(); 
}
function replaceHtml(replacedStr,repStr,endStr){   
    var replacedStrF = "";   
    var replacedStrB = "";   
    var repStrIndex = replacedStr.indexOf(repStr);   
    while(repStrIndex != -1){   
        replacedStrF = replacedStr.substring(0,repStrIndex);   
        replacedStrB = replacedStr.substring(repStrIndex,replacedStr.length);   
        replacedStrB = replacedStrB.substring(replacedStrB.indexOf(endStr)+1,replacedStrB.length);   
        replacedStr = replacedStrF + replacedStrB;   
        repStrIndex = replacedStr.indexOf(repStr);   
    }   
    return replacedStr;   
}
在js里用oXL.Application.GetSaveAsFilename("save.xls", "Excel Spreadsheets (*.xls), *.xls");
确实可以调出excel的保存文件对话框,但是这个对话框不是活动的,必须是“显示桌面”,再打开改IE页面,才能看到这个保存对话框。不知道有没有办法让它直接得到焦点。excel进程可以退出,CollectGarbage()回收js内存。
可以直接用SaveAs()方法用固定文件名固定路径保存。只是用户体验不好。欢迎大家讨论。