vsto worksheet查找某个字符串

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值