setMergedCellStyle method

void setMergedCellStyle(
  1. CellIndex start,
  2. CellStyle mergedCellStyle
)

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;
        }
      }
    }
  }
}