setMergedCellStyle method
Sets the cellStyle of the merged cells.
It will get the merged cells only by giving the starting position of merged cells.
Implementation
void setMergedCellStyle(CellIndex start, CellStyle mergedCellStyle) {
List<List<CellIndex>> _mergedCells = spannedItems
.map(
(e) => e.split(":").map((e) => CellIndex.indexByString(e)).toList(),
)
.toList();
List<CellIndex> _startIndices = _mergedCells.map((e) => e[0]).toList();
List<CellIndex> _endIndices = _mergedCells.map((e) => e[1]).toList();
if (_mergedCells.isEmpty ||
start.columnIndex < 0 ||
start.rowIndex < 0 ||
!_startIndices.contains(start)) {
return;
}
CellIndex end = _endIndices[_startIndices.indexOf(start)];
bool hasBorder = mergedCellStyle.topBorder != Border() ||
mergedCellStyle.bottomBorder != Border() ||
mergedCellStyle.leftBorder != Border() ||
mergedCellStyle.rightBorder != Border() ||
mergedCellStyle.diagonalBorderUp ||
mergedCellStyle.diagonalBorderDown;
if (hasBorder) {
for (var i = start.rowIndex; i <= end.rowIndex; i++) {
for (var j = start.columnIndex; j <= end.columnIndex; j++) {
CellStyle cellStyle = mergedCellStyle.copyWith(
topBorderVal: Border(),
bottomBorderVal: Border(),
leftBorderVal: Border(),
rightBorderVal: Border(),
diagonalBorderUpVal: false,
diagonalBorderDownVal: false,
);
if (i == start.rowIndex) {
cellStyle = cellStyle.copyWith(
topBorderVal: mergedCellStyle.topBorder,
);
}
if (i == end.rowIndex) {
cellStyle = cellStyle.copyWith(
bottomBorderVal: mergedCellStyle.bottomBorder,
);
}
if (j == start.columnIndex) {
cellStyle = cellStyle.copyWith(
leftBorderVal: mergedCellStyle.leftBorder,
);
}
if (j == end.columnIndex) {
cellStyle = cellStyle.copyWith(
rightBorderVal: mergedCellStyle.rightBorder,
);
}
if (i == j ||
start.rowIndex == end.rowIndex ||
start.columnIndex == end.columnIndex) {
cellStyle = cellStyle.copyWith(
diagonalBorderUpVal: mergedCellStyle.diagonalBorderUp,
diagonalBorderDownVal: mergedCellStyle.diagonalBorderDown,
);
}
if (i == start.rowIndex && j == start.columnIndex) {
cell(start).cellStyle = cellStyle;
} else {
_putData(i, j, null);
_sheetData[i]![j]!.cellStyle = cellStyle;
}
}
}
}
}