Как определить, какие ячейки в объединенном диапазоне видны и могут иметь значение? - PullRequest
0 голосов
/ 06 марта 2019

Мне нужно выяснить, какие Cells из Range не видны в объединяемых диапазонах.Мне нужно включить пустые ячейки, но я хочу исключить ячейки, которые не видны в результате объединения ячеек.(Только одна ячейка, строка, столбец в объединенном диапазоне могут содержать непустое значение ...?).

У меня есть следующий код:

    using (XLWorkbook wb = new XLWorkbook(ExcelFile.FullName))
    {
        foreach (IXLNamedRange r in wb.NamedRanges)
        {
                foreach (var c in r.Ranges.Cells())
                {
                    if (c.IsMerged() /*&& something*/)
                        continue;
                    /*Do processing of visible values*/

Мне нужно, чтобы я был виденячейки из объединенных диапазонов, которые будут содержать значения, если значение заполнено, т.е. без использования IsEmpty().Я могу определить, объединен ли диапазон, но как добавить условие, включающее только видимые ячейки?Это всегда первый столбец / строка?IsMerged() возвращает true для всех ячеек в объединенном диапазоне, не только для тех, которые не видны и не могут содержать значение.

Пример проблемы:

Merged ranges

Именованный диапазон имеет адрес C21: D33.Мне нужны значения C21: C33, но мне не нужно включать значения D21: D33 - все они всегда равны нулю.Но значения C21: C33 также могут быть нулевыми или пустыми, но они мне нужны все.D21: D33 не может содержать ничего, кроме NULL, но C21: C33 может содержать ненулевое значение.Мне нужны все клетки, которые могут быть не пустыми.

1 Ответ

1 голос
/ 11 марта 2019

Этот код находит ячейки C21:C33:

using (var wb = new XLWorkbook("test.xlsx"))
{
    var nr = wb.NamedRange("MyRange");
    foreach (var range in nr.Ranges)
    {
        var cellsToFind = range.Cells(c => c.MergedRange().FirstCell() == c);

        Console.WriteLine($"{cellsToFind.First().Address}:{cellsToFind.Last().Address}");
    }
}
...