Найти текст в диапазоне, используя EPPlus - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь найти текст в листе 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 голосов
/ 18 января 2019

Я исправил свою проблему, выполнив это:

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
0 голосов
/ 17 января 2019

Может ли быть так, что у вас есть ячейки в диапазоне, для которого не установлено значение? В этом случае EPPlus вернет ноль, и ваш вызов ToString () вызовет исключение.

Сам не пробовал этот код, но, возможно, вы можете использовать «Безопасный оператор навигации» в C #? Как это:

var Row as object = From cell In ws.SelectedRange("A1:B64")
                Where cell.Value?.ToString().Equals("any text")
                Select cell.Start.Row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...