掃描二維碼關注

首頁 APP開(kāi)發小(xiǎo)程序開(kāi)發 微信公衆号 網站建設 營銷推廣 經典案列 産品服務 關于我們

“學習(xí)不僅是掌握知識”

向書(shū)本學習(xí),還要向實踐學習(xí)、向生活學習(xí)。消化已有(yǒu)知識,
而且要力求有(yǒu)所發現、有(yǒu)所發明(míng)、有(yǒu)所創造

使用(yòng)JavaScript将複雜表格導出爲Excel

2019/4/7 11:21:33

使用(yòng)JavaScript将複雜表格導出爲Excel

  使用(yòng)JavaScript将表格導出爲Excel文(wén)件(jiàn)是一種比較常見的(de)導出方法,但(dàn)複雜表格的(de)導出比較麻煩(比如(rú)報表的(de)導出),爲此我專門寫了一段代碼專門處理(lǐ)表格導出,與各位分(fēn)享一下。

  util.js:

/**
 * Utilities for exporting a table as an excel file
 * @author Daniel.Sun(山風小(xiǎo)子)
 * @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() - 1, this.getCorrectedCol()
                );
            } else if (colsShou


深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04

咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967

更多可(kě)以了解的(de)信息

客戶案列
新聞資訊
資質榮譽
團隊風采
項目進度查詢

售前QQ咨詢
QQ溝通 項目QQ溝通

精銳軟件(jiàn)

Copyright© 2018-2023 深圳市無窮大軟件技術有限公司 All Rights Reserved. 京ICP證000000号 公安備案号:粵公網安備44030502009460号