使用 EPPlus 查找范围内的文本

Find a text in a range using EPPlus

我正在尝试在 excel sheet (ws) 中查找文本,但我无法确定该文本的确切位置,我只知道它会在给定的范围 (A1:B64).

当我使用此代码(用于测试目的)时,它工作正常并且我可以找到值:

var Row as object = From cell In ws.SelectedRange(2,2)
                    Where cell.Value.ToString().Equals("any text")
                    Select cell.Start.Row

但是当我将代码更改为:

var Row as object = From cell In ws.SelectedRange("A1:B64")
                    Where cell.Value.ToString().Equals("any text")
                    Select cell.Start.Row

我收到一条错误消息:

 System.NullReferenceException: 'Object reference not set to an instance of 
 an object.'
 OfficeOpenXml.ExcelRangeBase.Value.get returned Nothing.

我还尝试将所选范围的值更改为:

 ws.SelectedRange(ws.Dimension.Address)     
 ws.SelectedRange(ws.Dimension.Start.Row, ws.Dimension.End.Column)
 ws.SelectedRange(1,1,64, 2)
 ws.Cells("A1:B64")

它们都抛出错误。

有什么帮助吗?

提前致谢。

不会是你的范围内有单元格没有设置值吧?在这种情况下,EPPlus 将 return 为 null,并且您的 ToString() 调用将抛出异常。

我自己还没有尝试过这段代码,但也许您可以在 C# 中使用 "Safe Navigation Operator"?像这样:

var Row as object = From cell In ws.SelectedRange("A1:B64")
                Where cell.Value?.ToString().Equals("any text")
                Select cell.Start.Row

我这样做解决了我的问题:

Dim Row as object = From cell In ws.SelectedRange("A1:B64")
                    Where cell.Value <> Nothing AndAlso cell.Value.ToString().Equals("any text")
                    Select cell.Start.Row