【问题标题】:Non-empty cells in Excel Range C#Excel Range C#中的非空单元格
【发布时间】:2015-09-10 10:07:33
【问题描述】:

我想选择从当前单元格到行的最后一个单元格的所有非空单元格。

如果我们使用

currentRange.End[XlDirection.xlToRight]

当非空单元格不连续link 时,这不是一个好方法。比如单元格A1、A2、A3、A5、A6不为空,那么RangeA1.End[XlDirection.xlToRight]只到A3,也就是最后一个连接到RangeA1的非空单元格。

另一种选择:

CreateRange(currentRange, lastRangePossibleinRow).SpecialCells(...)

我有 3 个问题:

  1. currentRange.End[XlDirection.xlToRight] 似乎是一个不可靠的解决方案。例如,如果 currentRange 为空,这将返回 1 个单元格(本身)。

  2. 如何有效地将选择范围从当前单元格扩展到行中的最后一个单元格? CreateRange(currentRange, get_range(currentRange.Row + sheet.Columns.Count.ToString())) ?也许有更好的解决方案。

  3. 如何获取此 Range 中不为空的单元格集合? .SpecialCells(xlCellTypeConstants | xlCellTypeFormulas) 将不起作用,例如,如果未找到,.SpecialCells(xlCellTypeConstants) 将抛出异常:未找到单元格。

【问题讨论】:

    标签: c# excel range


    【解决方案1】:

    我是 VBE 的新手,但我认为解决方法是

    1. 定位一个您期望非空白的范围
    2. 遍历它们
    3. 检查是否为空白
    4. RC[#] 的形式将错误的col# 存储在数组中
    5. 然后只选择Range("Array(1),Array(2),...").Select 的那些。

    抱歉,伪代码...迟到了两个月。 =/

    【讨论】:

    • 很高兴收到您的意见,学习新东西永远不会太晚。 ;) 关于你的答案,这正是我想要避免的:迭代和 for 循环。它会损害性能,在已经包含 100 万个单元格的 Excel 中成像一行或一列;如果我想检查多个,然后将其乘以几行/列。这就是我想像 .Specialcells 这样的内置处理的原因,根据我的经验,它可以提供更好的性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多