UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

78 lines (77 loc) 3.39 kB
/** * DevExtreme (esm/exporter/exceljs/export_merged_ranges_manager.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import _extends from "@babel/runtime/helpers/esm/extends"; class MergedRangesManager { constructor(dataProvider, helpers, mergeRowFieldValues, mergeColumnFieldValues) { this.mergedCells = []; this.mergedRanges = []; this.dataProvider = dataProvider; this.helpers = helpers; this.mergeRowFieldValues = mergeRowFieldValues; this.mergeColumnFieldValues = mergeColumnFieldValues } updateMergedRanges(excelCell, rowIndex, cellIndex) { if (this.helpers._isHeaderCell(this.dataProvider, rowIndex, cellIndex)) { if (!this.isCellInMergedRanges(rowIndex, cellIndex)) { var { rowspan: rowspan, colspan: colspan } = this.dataProvider.getCellMerging(rowIndex, cellIndex); var isMasterCellOfMergedRange = colspan || rowspan; if (isMasterCellOfMergedRange) { var allowToMergeRange = this.helpers._allowToMergeRange(this.dataProvider, rowIndex, cellIndex, rowspan, colspan, this.mergeRowFieldValues, this.mergeColumnFieldValues); this.updateMergedCells(excelCell, rowIndex, cellIndex, rowspan, colspan, allowToMergeRange); if (allowToMergeRange) { this.mergedRanges.push(_extends({ masterCell: excelCell }, { rowspan: rowspan, colspan: colspan })) } } } } } isCellInMergedRanges(rowIndex, cellIndex) { return this.mergedCells[rowIndex] && this.mergedCells[rowIndex][cellIndex] } findMergedCellInfo(rowIndex, cellIndex) { if (this.helpers._isHeaderCell(this.dataProvider, rowIndex, cellIndex)) { if (this.isCellInMergedRanges(rowIndex, cellIndex)) { return this.mergedCells[rowIndex][cellIndex] } } } updateMergedCells(excelCell, rowIndex, cellIndex, rowspan, colspan, allowToMergeRange) { for (var i = rowIndex; i <= rowIndex + rowspan; i++) { for (var j = cellIndex; j <= cellIndex + colspan; j++) { if (!this.mergedCells[i]) { this.mergedCells[i] = [] } this.mergedCells[i][j] = { masterCell: excelCell, unmerged: !allowToMergeRange } } } } applyMergedRages(worksheet) { this.mergedRanges.forEach(range => { var startRowIndex = range.masterCell.fullAddress.row; var startColumnIndex = range.masterCell.fullAddress.col; var endRowIndex = startRowIndex + range.rowspan; var endColumnIndex = startColumnIndex + range.colspan; worksheet.mergeCells(startRowIndex, startColumnIndex, endRowIndex, endColumnIndex) }) } } export { MergedRangesManager };