public static List<RowColInfo> FindCells(
Worksheet worksheet,
string strFind,
Range searchRange = null,
XlFindLookIn xlFindLookIn = XlFindLookIn.xlValues)
{
List<RowColInfo> result = new List<RowColInfo>();
// Use used range if search range is not provided
searchRange ??= worksheet.UsedRange;
string[] searchTerms = strFind.Split('~');
foreach (string term in searchTerms)
{
if (searchRange.Cells == null || searchRange.Cells.Count == 0)
return result;
object[,] values = GetValues(searchRange, xlFindLookIn);
if (values == null || values.Length < 2)
return result;
FindMatches(values, term, result, searchRange);
if (result.Count > 0)
return result;
}
return result;
}
private static object[,] GetValues(Range searchRange, XlFindLookIn xlFindLookIn)
{
try
{
return xlFindLookIn == XlFindLookIn.xlFormulas ? searchRange.Formula : searchRange.Value;
}
catch
{
return null; // Log error if needed
}
}
private static void FindMatches(object[,] values, string term, List<RowColInfo> result, Range searchRange)
{
int maxRow = values.GetLength(0);
int maxColumn = values.GetLength(1);
for (int c = 1; c <= maxColumn; c++)
{
for (int r = 1; r <= maxRow; r++)
{
if (values[r, c] != null)
{
string cellValue = Tool.TrimAll(Convert.ToString(values[r, c]));
if (cellValue.Contains(term) && !(cellValue.Contains('.') && !cellValue.Contains('-')))
{
result.Add(new RowColInfo
{
Value = cellValue,
col = c + searchRange.Column - 1,
row = r + searchRange.Row - 1,
Keyword = term
});
}
}
}
}
}
05-07
4939