【问题标题】:Regex Match Null Cells正则表达式匹配空单元格
【发布时间】:2020-07-21 11:28:40
【问题描述】:

我尝试在我的函数中使用正则表达式。它允许在正则表达式中找到具有指定字符串的单元格(忽略大小写)。

问题是,如果我在单元格之前有空框,我有一个例外。 我不明白为什么 NULL 单元格是个问题。

我的功能:

public int FindSearchableCol()
{
    var j = 1;
    var x = FindMainInfoStartRow();
    var i = x;
    string test = ws.Cells[i, j].Value2;
    Regex searchable = new Regex(@"(?<=\*)(searchable)(?=\*)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
    try
    {
        while (true)
        {
            MatchCollection matches = searchable.Matches(ws.Cells[i, j].Value2);
            if (matches.Count > 0)
            {
                return j;
            }
            else
            {
                i++;
                if (ws.Cells[i, j].Value2 == "*MAIN INFO END*")
                {
                    i = x;
                    j++;
                }
            }
        }
    }
    finally
    {
    }
}

【问题讨论】:

  • 你得到了什么异常,在哪一行?
  • 我在'MatchCollection matches = searchable.Matches(ws.Cells[i, j].Value2);'这一行得到了'System.ArgumentNullException'
  • VS 告诉我值不能为空
  • 您正在阅读一个 excel 工作表(我可以从 Value2 看出)。工作表有一个使用范围,该范围从默认大小开始,并随着您添加数据而增长。看起来您的变量 j 可能超出范围(也是 i)。假设使用范围为 10 行 x 10 列 (A1:J10)。因此,如果您在单元格 J5 中找到一个项目。您编写代码,然后将 J 增加 1,您现在是列 K,它超出了使用范围。
  • " 我怎样才能传递空值?" 正如docs 所说,如果输入为空,Matches 会抛出 ArgumentNullException。所以你可以使用searchable.Matches(ws.Cells[i, j].Value2 ?? string.Empty)

标签: c# excel interop


【解决方案1】:

使用:

MatchCollection matches = searchable.Matches(ws.Cells[i, j].Value2 ?? string.Empty)

改为:

MatchCollection matches = searchable.Matches(ws.Cells[i, j].Value2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2017-04-05
    • 1970-01-01
    • 2018-02-16
    • 2010-10-08
    • 2020-08-22
    • 2014-03-25
    相关资源
    最近更新 更多