devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
79 lines (78 loc) • 3.46 kB
JavaScript
/**
* DevExtreme (cjs/exporter/exceljs/export_merged_ranges_manager.js)
* Version: 23.2.6
* Build date: Wed May 01 2024
*
* Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
exports.MergedRangesManager = void 0;
let MergedRangesManager = function() {
function MergedRangesManager(dataProvider, worksheet) {
this.dataProvider = dataProvider;
this.worksheet = worksheet;
this.mergedCells = [];
this.mergedRanges = []
}
var _proto = MergedRangesManager.prototype;
_proto.updateMergedRanges = function(excelCell, rowIndex, cellIndex, helpers) {
if (helpers._isHeaderCell(rowIndex, cellIndex) && !this.isCellInMergedRanges(rowIndex, cellIndex)) {
const {
rowspan: rowspan,
colspan: colspan
} = this.dataProvider.getCellMerging(rowIndex, cellIndex);
const isMasterCellOfMergedRange = colspan || rowspan;
if (isMasterCellOfMergedRange) {
const allowToMergeRange = helpers._allowToMergeRange(rowIndex, cellIndex, rowspan, colspan);
this.updateMergedCells(excelCell, rowIndex, cellIndex, rowspan, colspan);
if (allowToMergeRange) {
const shouldReduceInfoRange = helpers._isInfoCell(rowIndex, cellIndex) && helpers._allowExportRowFieldHeaders();
this.mergedRanges.push({
masterCell: excelCell,
rowspan: rowspan - (shouldReduceInfoRange && rowspan > 0),
colspan: colspan
})
}
}
}
};
_proto.isCellInMergedRanges = function(rowIndex, cellIndex) {
return this.mergedCells[rowIndex] && this.mergedCells[rowIndex][cellIndex]
};
_proto.findMergedCellInfo = function(rowIndex, cellIndex, isHeaderCell) {
if (isHeaderCell && this.isCellInMergedRanges(rowIndex, cellIndex)) {
return this.mergedCells[rowIndex][cellIndex]
}
};
_proto.updateMergedCells = function(excelCell, rowIndex, cellIndex, rowspan, colspan) {
for (let i = rowIndex; i <= rowIndex + rowspan; i++) {
for (let j = cellIndex; j <= cellIndex + colspan; j++) {
if (!this.mergedCells[i]) {
this.mergedCells[i] = []
}
this.mergedCells[i][j] = {
masterCell: excelCell
}
}
}
};
_proto.addMergedRange = function(masterCell, rowspan, colspan) {
this.mergedRanges.push({
masterCell: masterCell,
rowspan: rowspan,
colspan: colspan
})
};
_proto.applyMergedRages = function() {
this.mergedRanges.forEach(range => {
const startRowIndex = range.masterCell.fullAddress.row;
const startColumnIndex = range.masterCell.fullAddress.col;
const endRowIndex = startRowIndex + range.rowspan;
const endColumnIndex = startColumnIndex + range.colspan;
this.worksheet.mergeCells(startRowIndex, startColumnIndex, endRowIndex, endColumnIndex)
})
};
return MergedRangesManager
}();
exports.MergedRangesManager = MergedRangesManager;