【发布时间】: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)