findAndReplace method
Returns the count of replaced source with target
source is Pattern which allows you to pass your custom RegExp or a simple String providing more control over it.
optional argument first is used to replace the number of first earlier occurrences
If first is set to 3 then it will replace only first 3 occurrences of the source with target.
excel.findAndReplace('MySheetName', 'sad', 'happy', first: 3);
or
var mySheet = excel['mySheetName'];
mySheet.findAndReplace('sad', 'happy', first: 3);
In the above example it will replace all the occurences of sad with happy in the cells
Other options are used to narrow down the starting and ending ranges of cells.
Implementation
int findAndReplace(Pattern source, String target,
{int first = -1,
int startingRow = -1,
int endingRow = -1,
int startingColumn = -1,
int endingColumn = -1}) {
int replaceCount = 0,
_startingRow = 0,
_endingRow = -1,
_startingColumn = 0,
_endingColumn = -1;
if (startingRow != -1 && endingRow != -1) {
if (startingRow > endingRow) {
_endingRow = startingRow;
_startingRow = endingRow;
} else {
_endingRow = endingRow;
_startingRow = startingRow;
}
}
if (startingColumn != -1 && endingColumn != -1) {
if (startingColumn > endingColumn) {
_endingColumn = startingColumn;
_startingColumn = endingColumn;
} else {
_endingColumn = endingColumn;
_startingColumn = startingColumn;
}
}
int rowsLength = maxRows, columnLength = maxColumns;
for (int i = _startingRow; i < rowsLength; i++) {
if (_endingRow != -1 && i > _endingRow) {
break;
}
for (int j = _startingColumn; j < columnLength; j++) {
if (_endingColumn != -1 && j > _endingColumn) {
break;
}
final sourceData = _sheetData[i]?[j]?.value;
if (sourceData is! TextCellValue) {
continue;
}
final result =
sourceData.value.toString().replaceAllMapped(source, (match) {
if (first == -1 || first != replaceCount) {
++replaceCount;
return match.input.replaceRange(match.start, match.end, target);
}
return match.input;
});
_sheetData[i]![j]!.value = TextCellValue(result);
}
}
return replaceCount;
}