js到處excel

//導出到Excel,注意,表格標記內不得有註釋,因爲childNodes會把註釋也算進去
//如果出錯,需要關閉Excel,否則Excel進程會一直運行着
function ExportExcel(btn,TabId,strCols,sTitle,sHeader,sFooter){
    btn.style.cursor = "wait";
    event.returnValue = false;   
    //try{   
    var tab = document.getElementById("DataGrid1");
    if(tab == null) tab = document.getElementById("dg")
    if(tab == null) tab = document.getElementById("db")
    if(tab == null) tab = document.getElementById(TabId)
    if(tab == null){
        alert("缺少表格對象");
        btn.style.cursor = "hand";
        return;
    }       
    var t = tab.firstChild;
    var rows = t.childNodes.length;
    //alert(t.nodeName); //test
    var tds = t.childNodes[0].childNodes.length;
    var cols = 0;
    for(var i=0;i<tds;i++){
        var td = t.childNodes[0].childNodes[i];
        if(parseInt(td.colSpan)>1){
            cols += parseInt(td.colSpan);
        }
        else{
            cols++;
        }
    }
    /////////////////////////////創建excel文檔
    try{
        var oXL = new ActiveXObject("Excel.Application");
    }catch(e){
        alert("請確認已經安裝了Excel並允許運行Excel!");
        btn.style.cursor = "hand";
        return;
    }
    oXL.Workbooks.Add();
    var obook = oXL.ActiveWorkBook;
    var osheets = obook.Worksheets;
    var osheet = obook.Sheets(1);
    var xlrow = 1;
        //添加標題
    if((sTitle == "") || (typeof(sTitle)=="undefined") || (sTitle==null)){
        var t_tdHeadc = document.getElementById("tdHeadc");
        if(t_tdHeadc != null){
            sTitle = t_tdHeadc.innerText;
            var sk = sTitle.lastIndexOf("-->")+3;
            sTitle = sTitle.substring(sk);
        }
    }
    osheet.Cells(1, 1) = sTitle;
    osheet.Range(osheet.Cells(xlrow, 1),osheet.Cells(xlrow,cols)).Select(); //選擇該列
    oXL.Selection.HorizontalAlignment = 3;                          //居中
    oXL.Selection.MergeCells = true;
    xlrow++;
        //小標題
    if((sHeader == "") || (typeof(sHeader)=="undefined") || (sHeader==null)){
        sHeader = "";
    }       
    if(sHeader != ""){
        osheet.Cells(2, 1) = sHeader;
        osheet.Range(osheet.Cells(xlrow, 1),osheet.Cells(xlrow,cols)).Select(); //選擇該列
        //oXL.Selection.HorizontalAlignment = 3;                          //居中
        oXL.Selection.MergeCells = true;
        xlrow++;
    }
    var winX = (screen.width - 300) / 2;
    var winY = (screen.height - 120) / 2;

    var win = window.open("","","directories=0,location=0,memubar=0,scrollbars=0,status=0,toolbar=0,width=230,height=75,left=" + winX + ",top=" + winY);
    win.document.write(mkProcessTxt(sTitle,rows));
    //win.document.write("<div style='font-size:10pt;font-family:宋體'>總共" + rows + "行,已導出<font id='sx' color='#cc0000'></font>行!</div>");
    //win.m_pub_wzs_progress_show(rows,0);
    strCols = ","+strCols+",";
    var aRowSpans = new Array();
    for(var i=0;i<cols;i++){
        aRowSpans[i] = 1;
    }
    var isProgressErr = false;
    for(var i = 0; i < rows; i++){
        //btn.value = i;
        if(!isProgressErr){
            try{
                win.m_pub_wzs_progress_show(rows,i+1);
            }
            catch(e){
                isProgressErr = true;
            }
        }
        var row = t.childNodes[i];
        var xlcol =0;           
        var viwCol = -1; //所在表格的位置,指顯示位置,如果有行合併時,會與列索引不一致
        var colInx = -1;
        var colSpans = 1;
        for(var h = 0; h < cols; h++){
            if(aRowSpans[h]>1){
                xlcol++;
                aRowSpans[h]--;
                viwCol++;
                continue;
            }
            else{
                colInx++;
            }
            var td = t.childNodes[i].childNodes[colInx];
            if(td == null) continue;
            colSpans = td.colSpan;
            var rowSpan = td.rowSpan;
            if(isNaN(rowSpan)) rowSpan = 1;
            for(var k=0;k<td.colSpan;k++){
               viwCol++;
               xlcol++;
               aRowSpans[viwCol] = rowSpan;
            }
            h+=td.colSpan-1; //跳過合併列
            if(td.className=="hideNode"){
                xlcol--;
                continue;
            }
            var s = "";
            if(td.hasChildNodes() && td.firstChild.nodeName.toLowerCase()=="input"){
                if(td.firstChild.type.toLowerCase()=="text"){
                    s = td.firstChild.value;
                }
                else if(td.firstChild.type.toLowerCase()=="radio"){   //如果是單選框, 遍歷該框所有單選框,找到選擇的值
                    for(var k=0;k<td.childNodes.length;k++){
                        var cn = td.childNodes[k];
                        if(cn.nodeName.toLowerCase()=="input" && cn.type.toLowerCase() == "radio" && cn.checked){
                            s = cn.value;
                            break;
                        }
                    }
                }
            }
            else{
                s = td.innerText;
            }
            if(strCols.indexOf("," + (xlcol-1) + ",")!=-1){
                osheet.Cells(xlrow,xlcol).NumberFormatLocal = ;
            }
            if(td.rowSpan>1 || td.colSpan>1){
                osheet.range(osheet.cells(xlrow,xlcol),osheet.cells(xlrow-1+td.rowSpan, xlcol-td.colSpan+1)).Select();
                oXL.Selection.MergeCells = true;      
                osheet.Cells(xlrow,xlcol).HorizontalAlignment = 3;
                //osheet.cells(i+td.rowSpan, xlcol-td.colSpan+1).value = s;
                osheet.Cells(xlrow,xlcol-td.colSpan+1).value = s;//m_splitLen(s,30,'\r\n');
            }else{
                osheet.Cells(xlrow,xlcol).value = s;//m_splitLen(s,30,'\r\n');
            }
        }
        xlrow++;           
    }
    //添加表尾
    if((sFooter == "") || (typeof(sFooter)=="undefined") || (sFooter==null)){
        sFooter = "";
    }           
    var d = new Date();
    var sUser = "";
    if((window.parent != null) && (window.parent.parent != null)){
        try{
            sUser = window.parent.parent.bottomFrame.document.getElementById("labUser").innerText.replace("用戶:","").replace(/ /g,"");
        }
        catch(ex){
        }               
    }
    var sFooterDefault = " 製表人:" + sUser + "    製表時間:" + d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + "    ";
    osheet.Cells(xlrow, 1) = sFooterDefault + sFooter;
    osheet.Range(osheet.Cells(xlrow, 1),osheet.Cells(xlrow,cols)).Select(); //選擇該列//oXL.Selection.HorizontalAlignment = 4;                          //居中
    oXL.Selection.MergeCells = true;
    osheet.Range(osheet.Cells(1, 1),osheet.Cells(1,1)).Select(); //選擇第一個單元格列
    osheet.Columns.AutoFit();   //自動列寬
    for(var i=1;i<xlrow;i++){
        osheet.Rows(i).RowHeight = osheet.Rows(i).RowHeight + 6;   //自動大小後上下無邊距,需要增加高度,要不太擠。
    }   
    if(!isProgressErr){         //關閉進度條
        win.close();
    }
    oXL.Visible = true;
    oXL.UserControl = true;
   
    oXL = null;
    obook = null;
    osheets = null;
    osheet = null;
   
    btn.style.cursor = "hand";
}
function m_selTxt(pSelId){
    var pSel = document.getElementById(pSelId);
    if(pSel.selectedIndex == -1) return "";
    return pSel.options[pSel.selectedIndex].text;
}
function m_selVal(pSelId){
    var pSel = document.getElementById(pSelId);
    if(pSel.selectedIndex == -1) return "";
    return pSel.options[pSel.selectedIndex].value;
}
function mkProcessTxt(sTitle,rows){
    var s = '<html><title>' + sTitle + '導出Excel</title><body bgColor=white><div id="m_pub_wzs_progress_x" style="background:white;overflow:hidden;padding-top:0;display:none;position:absolute;left:10px;top:25px;"><table id="m_pub_wzs_progress_tab" border=0 cellspacing=1 bgcolor="#CCCCCC" style="display:inline;border-width:1px;border-style:solid;border-left-color:#333333;border-top-color:#333333;border-right-color:#EEEEEE;border-bottom-color:#EEEEEE;"><tr height=17>';
    var ss = new Array(30);
    for(var i=0;i<30;i++){
        ss[i] = '<td width=4 bgcolor="#000088"></td>';
    }
    s += ss.join("");
    s += '</tr></table><br><span id="m_pub_wzs_progress_percent" style="font-size:10pt;vertical-align:middle;color:black;font-family:宋體"&gt;總計' + rows + '行,已導出<font id="sx" color="#cc0000"></font>行!</span></div><br /><br /><br /><script language="javascript">var osx=document.getElementById("sx");var div = document.getElementById("m_pub_wzs_progress_x");function m_pub_wzs_progress_show(pTotalCount,pCurrCount){osx.innerText = pCurrCount;var m = Math.floor(pCurrCount / pTotalCount * 30);div.style.display = "";var tr = div.firstChild.rows[0];for(var i=0;i<tr.cells.length;i++){var td=tr.cells[i];   if(i<m) td.bgColor="#000088";   else td.bgColor="#CCCCCC";}}function m_pub_wzs_progress_hide(){    var div = document.getElementById("m_pub_wzs_progress_x");    div.style.display = "none";}</script></body></html>'
    return s;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章