使用EPPlus查找范围内的文本

时间:2019-01-16 21:13:34

标签: vb.net epplus

我正在尝试在Excel工作表(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")

所有这些都引发错误。

有帮助吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

难道您没有设置值的范围内的单元格吗?在这种情况下,EPPlus将返回null,并且您的ToString()调用将引发异常。

我自己没有尝试过此代码,但是也许您可以在C#中使用“安全导航操作符”?像这样:

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

答案 1 :(得分:0)

我已解决此问题:

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