如何确定合并范围内的哪些单元格是可见的并且可以具有值?

问题描述 投票:0回答:1

我需要找出哪个CellsRange在合并的范围内不可见。我需要包含空单元格,但我想排除由于合并单元格而不可见的单元格。 (合并范围中只有一个单元格,行,列可以包含非空值...?)。

我有以下代码:

    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 - 它们都是null。但是C21:C33的值也可以为空或空,但我需要它们。 D21:D33不能包含除null之外的任何其他内容,但C21:C33可以包含非空值。我需要所有非空的单元格。

c# excel closedxml
1个回答
1
投票

此代码查找单元格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}");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.