merge method
Merges the cells starting from start
to end
.
If custom value
is not defined then it will look for the very first available value in range start
to end
by searching row-wise from left to right.
Implementation
merge(CellIndex start, CellIndex end, {dynamic customValue}) {
int startColumn = start._columnIndex,
startRow = start._rowIndex,
endColumn = end._columnIndex,
endRow = end._rowIndex;
_checkMaxCol(startColumn);
_checkMaxCol(endColumn);
_checkMaxRow(startRow);
_checkMaxRow(endRow);
if ((startColumn == endColumn && startRow == endRow) ||
(startColumn < 0 || startRow < 0 || endColumn < 0 || endRow < 0) ||
(_spannedItems.contains(
getSpanCellId(startColumn, startRow, endColumn, endRow)))) {
return;
}
List<int> gotPosition = _getSpanPosition(start, end);
_excel._mergeChanges = true;
startColumn = gotPosition[0];
startRow = gotPosition[1];
endColumn = gotPosition[2];
endRow = gotPosition[3];
bool getValue = true;
Data value = Data.newData(this, startRow, startColumn);
if (customValue != null) {
value._value = customValue;
getValue = false;
}
for (int j = startRow; j <= endRow; j++) {
for (int k = startColumn; k <= endColumn; k++) {
if (_sheetData[j] != null && _sheetData[j]![k] != null) {
if (getValue &&
_sheetData[j]![k]!.value != null &&
_sheetData[j]![k]!.cellStyle != null) {
value = _sheetData[j]![k]!;
getValue = false;
}
_sheetData[j]!.remove(k);
}
}
}
if (_sheetData[startRow] != null) {
_sheetData[startRow]![startColumn] = value;
} else {
_sheetData[startRow] = {startColumn: value};
}
String sp = getSpanCellId(startColumn, startRow, endColumn, endRow);
if (!_spannedItems.contains(sp)) {
_spannedItems.add(sp);
}
_Span s = _Span();
s._start = [startRow, startColumn];
s._end = [endRow, endColumn];
_spanList.add(s);
_excel._mergeChangeLookup = sheetName;
}