如何确定合并区域中的哪些单元格可见并且可以具有值?

How to determine which cells in a merged range are visible and can have a value?

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

我有以下代码:

    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()。我可以确定范围是否已合并,但如何添加条件以仅包含可见单元格?它总是第一个 column/row 吗? IsMerged() returns true 合并区域中的所有单元格,不仅是那些不可见且不能包含值的单元格。

示例问题:

命名范围的地址为 C21:D33。 我需要 C21:C33 的值,但不需要包含值 D21:D33 - 它们始终为空。但是 C21:C33 的值也可以为 null 或空,但我需要它们。 D21:D33 不能包含除 null 以外的任何其他值,但 C21:C33 可以包含非 null 值。我需要所有非空的单元格。

此代码查找单元格 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}");
    }
}