<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0
    使用JavaScript將表格導(dǎo)出為Excel文件是一種比較常見的導(dǎo)出方法,但復(fù)雜表格的導(dǎo)出比較麻煩(比如報(bào)表的導(dǎo)出),為此我專門寫了一段代碼專門處理表格導(dǎo)出,與各位分享一下。

    util.js:
    /**
     * Utilities for exporting a table as an excel file
     * @author Daniel.Sun(山風(fēng)小子)
     * @version 0.6
     
    */

    var idTmr = "";
    function Cleanup() {
        window.clearInterval(idTmr);
        CollectGarbage();


    function exportAsXls(table) {

        
    function ImpactedCell(row, col, offset) {
            
    this.row = row;
            
    this.col = col;
            
    this.offset = offset;
        }

        
    function CurrentCell(row, col, text, colspan, rowspan) {
            
    this.row = row;
            
    this.col = col;
            
    this.text = text;
            
    this.colspan = colspan;
            
    this.rowspan = rowspan;

            
    this.getRow = function getRow() {
                
    return this.row;
            }

            
    this.setRow = function setRow(row) {
                
    this.row = row;
            }

            
    this.getCol = function getCol() {
                
    return this.col;
            }

            
    this.setCol = function setCol(col) {
                
    this.col = col;
            }

            
    this.setColspan = function setColspan(colspan) {
                
    this.colspan = colspan;
            }

            
    this.getColspan = function getColspan() {
                
    return this.colspan;
            }

            
    this.setRowspan = function setRowspan(rowspan) {
                
    this.rowspan = rowspan;
            }

            
    this.getRowspan = function getRowspan() {
                
    return this.rowspan;
            }
        }

        
    function CellManager(originalRow, colOffset, impactedCells, currentCell) {
            
    this.originalRow = originalRow;
            
    this.colOffset = colOffset;
            
    this.impactedCells = impactedCells;
            
    this.currentCell = currentCell;

            
    this.setCurrentCell = function setCurrentCell(currentCell) {
                
    this.currentCell = currentCell;
            }

            
    this.setOriginalRow = function setOriginalRow(originalRow) {
                
    this.originalRow = originalRow;
            }

            
    this.getCorrectedCol = function getCorrectedCol() {
                
    return this.currentCell.getCol() + this.colOffset;
            }

            
    this.setColOffset = function setColOffset(colOffset) {
                
    this.colOffset = colOffset;
            }

            
    this.getColOffset = function getColOffset() {
                
    return this.colOffset;
            }

            
    this.initColOffset = function initColOffset() {
                
    if (this.currentCell.getRow() != this.originalRow) {
                    
    this.colOffset = 0;
                }
            }

            
    this.getImpactedCells = function getImpactedCells() {
                
    return this.impactedCells;
            }

            
    this.addImpactedCell = function addImpactedCell(impactedCell) {
                
    this.impactedCells.push(impactedCell);
            }

            
    this.addImpactedCells = function addImpactedCells() {
                
    var currentCell = this.currentCell;

                
    for (var i = 1; i < currentCell.getRowspan(); i++) {
                    
    var impactedRow = currentCell.getRow() + i;
                    
                    
    this.calcOffset(impactedRow);

                    
    var impactedCol = this.getCorrectedCol();

                    
    var offset = 0;
                    
    if (currentCell.getColspan()) {
                        offset 
    = currentCell.getColspan();
                    } 
    else {
                        offset 
    = 1;
                    }

                    
    this.addImpactedCell(new ImpactedCell(impactedRow, impactedCol, offset))
                }

            }

            
    this.calcOffset = function calcOffset(row) {

                
    var colOffset = this.colOffset;
                
    var result = colOffset;
                
                
    for (var i = 0; i < this.impactedCells.length; i++) {
                    
    var impactedCell = this.impactedCells[i];

                    
    if (row == impactedCell.row && this.getCorrectedCol() == impactedCell.col) {

                        colOffset 
    += impactedCell.offset;
                        
                        result 
    = colOffset;
                        
    break;
                    }
                }

                
    this.colOffset = result;

                
    return result;
            }

            
    this.correctColOffset = function correctColOffset() {
                
    var currentCell = this.currentCell;

                
    var tmpColOffset;
                
    while (true) {
                    
    this.calcOffset(currentCell.getRow());

                    tmpColOffset 
    = this.getColOffset();

                    
    this.calcOffset(currentCell.getRow());

                    
    if (this.getColOffset() == tmpColOffset) {
                         
    break;
                    }
                } 
            }

            
    this.mergeCells = function mergeCells(oSheet, row1, col1, row2, col2) {
                oSheet.Range(oSheet.Cells(row1, col1), oSheet.Cells(row2, col2)).MergeCells 
    = true;
            }

            
    this.mergeCellsConditionally = function mergeCellsConditionally(oSheet) {
                
    var currentCell = this.currentCell;

                
    var colsShouldMerge = currentCell.getColspan() > 1;
                
    var rowsShouldMerge = currentCell.getRowspan() > 1;

                
    if (colsShouldMerge && !rowsShouldMerge) {
                    
    this.mergeCells(
                        oSheet,
                        currentCell.getRow(), 
    this.getCorrectedCol(),
                        currentCell.getRow(), 
    this.getCorrectedCol() + currentCell.getColspan() - 1
                    );
                } 
    else if (!colsShouldMerge && rowsShouldMerge) {
                    
    this.mergeCells(
                        oSheet,
                        currentCell.getRow(), 
    this.getCorrectedCol(),
                        currentCell.getRow() 
    + currentCell.getRowspan() - 1this.getCorrectedCol()
                    );
                } 
    else if (colsShouldMerge && rowsShouldMerge) {
                    
    this.mergeCells(
                        oSheet,
                        currentCell.getRow(), 
    this.getCorrectedCol(),
                        currentCell.getRow() 
    + currentCell.getRowspan() - 1this.getCorrectedCol() + currentCell.getColspan() - 1
                    );
                }
            }
        }

        
    var oXL = new ActiveXObject("Excel.Application");
        
    var oWB = oXL.Workbooks.Add();
        
    var oSheet = oWB.ActiveSheet;

        
    var cellManager = new CellManager(00new Array());

        traverseTable(
            table, 
            
    function(i, j, cell) {
                
    var text = cell.innerText;
                
    if (null != text) {
                    
    var row = i + 1;
                    
    var col = j + 1;

                    
    var currentCell = new CurrentCell(row, col, text);
                    cellManager.setCurrentCell(currentCell);

                    cellManager.initColOffset();

                    cellManager.setOriginalRow(row);

                    
    var colspan = cell.getAttribute("colspan");
                    
    var rowspan = cell.getAttribute("rowspan");
                    
                    currentCell.setColspan(colspan);
                    currentCell.setRowspan(rowspan);


                    
    var colsShouldMerge = currentCell.getColspan() > 1;
                    
    var rowsShouldMerge = currentCell.getRowspan() > 1;


                    cellManager.correctColOffset();

                    
    if (rowsShouldMerge) {
                        cellManager.addImpactedCells();
                    }
                    
                    cellManager.mergeCellsConditionally(oSheet);
                    
                    
    var cellInSheet = oSheet.Cells(currentCell.getRow(), cellManager.getCorrectedCol());

                    
    if (colsShouldMerge) {
                        
    var align = cell.getAttribute("align");
                        
    if ("center" == align) {
                            cellInSheet.HorizontalAlignment 
    = 3;
                        }
                         
                        cellManager.setColOffset(cellManager.getColOffset() 
    + (colspan - 1));

                    }

                    cellInSheet.NumberFormatLocal 
    = "@";
                    cellInSheet.value 
    = text;
                }
            }
        )

        oXL.Visible 
    = true;
        oXL.UserControl 
    = true

        oXL 
    = null;
        idTmr 
    = window.setInterval("Cleanup();",1); 
    }

    function traverseTable(table, action) {
        
    for (var i = 0; i < table.rows.length; i++) {
            
    var row = table.rows(i);
            
    for (var j = 0; j < row.cells.length; j++) {
                
    var cell = row.cells(j);
                action(i, j, cell);
            }
        }
    }


    測試代碼:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>無標(biāo)題文檔</title>

    <script src="util.js"></script>
    </head>

    <body>
    <table width="200" border="1" onclick="exportAsXls(this)">
      
    <tr>
        
    <td colspan="4" rowspan="2">1234678t</td>
        
    <td>5</td>
        
    <td>k</td>
        
    <td colspan="2">mr</td>
      
    </tr>
      
    <tr>
        
    <td>9</td>
        
    <td colspan="2" rowspan="3">wgbnpt</td>
        
    <td>z</td>
      
    </tr>
      
    <tr>
        
    <td rowspan="2">1013</td>
        
    <td colspan="2" rowspan="3">eh14151920</td>
        
    <td>11</td>
        
    <td>12</td>
        
    <td>c</td>
      
    </tr>
      
    <tr>
        
    <td>16</td>
        
    <td>17</td>
        
    <td>a</td>
      
    </tr>
      
    <tr>
        
    <td>18</td>
        
    <td colspan="5">2122dsj</td>
      
    </tr>
    </table>
    </body>
    </html>






    posted on 2009-09-13 22:06 山風(fēng)小子 閱讀(3083) 評論(4)  編輯  收藏 所屬分類: JavaScript
    主站蜘蛛池模板: 黄色毛片免费观看| 亚洲夂夂婷婷色拍WW47| 久久久久亚洲av无码专区喷水| 亚洲福利一区二区精品秒拍| 亚洲无mate20pro麻豆| 亚洲国产精品成人AV无码久久综合影院| 亚洲AV无码乱码精品国产| 亚洲理论电影在线观看| fc2免费人成在线| 亚洲AV无码专区在线播放中文| 亚洲综合日韩中文字幕v在线 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 日本免费A级毛一片| 国产精品视频免费| 久久免费看少妇高潮V片特黄| 1区2区3区产品乱码免费| 日韩精品无码人妻免费视频| 中文字幕在亚洲第一在线| 亚洲无线电影官网| 亚洲av成人一区二区三区在线播放 | 精品日韩亚洲AV无码| 久久精品国产亚洲AV天海翼| a毛片全部播放免费视频完整18| 波多野结衣免费在线观看| 亚洲国产午夜中文字幕精品黄网站 | 亚洲欧美日韩中文高清www777| 亚洲高清一区二区三区| 一级中文字幕乱码免费| 69式国产真人免费视频| 国产乱辈通伦影片在线播放亚洲 | 自拍偷自拍亚洲精品偷一| 另类免费视频一区二区在线观看| 成人免费毛片内射美女-百度| 国产亚洲成人久久| 亚洲 日韩经典 中文字幕| 你懂的在线免费观看| 麻豆国产入口在线观看免费| 亚洲大片在线观看| 特黄特色大片免费| 91在线视频免费看| 亚洲av综合avav中文|