向書(shū)本學(xué)習(xí),還要向?qū)嵺`學(xué)習(xí)、向生活學(xué)習(xí)。消化已有知識(shí),
而且要力求有所發(fā)現(xiàn)、有所發(fā)明、有所創(chuàng)造
2019/4/7 11:21:33
使用JavaScript將表格導(dǎo)出為Excel文件是一種比較常見(jiàn)的導(dǎo)出方法,但復(fù)雜表格的導(dǎo)出比較麻煩(比如報(bào)表的導(dǎo)出),為此我專門(mén)寫(xiě)了一段代碼專門(mén)處理表格導(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() - 1, this.getCorrectedCol()
);
} else if (colsShou
深圳市南山區(qū)南山街道南海大道西桂廟路北陽(yáng)光華藝大廈1棟4F、4G-04
咨詢電話:136 8237 6272
大客戶咨詢:139 0290 5075
業(yè)務(wù)QQ:195006118
技術(shù)QQ:179981967
深圳精銳軟件 深圳APP開(kāi)發(fā) 深圳小程序開(kāi)發(fā) 深圳微信開(kāi)發(fā) 深圳APP制作 深圳營(yíng)銷(xiāo)推廣 深圳網(wǎng)站建設(shè) 深圳游戲開(kāi)發(fā)
客戶案列
新聞資訊
資質(zhì)榮譽(yù)
團(tuán)隊(duì)風(fēng)采
項(xiàng)目進(jìn)度查詢
售前QQ咨詢
QQ溝通 項(xiàng)目QQ溝通