【问题标题】:How can I limit the length of a row selection when using Excel.Range()使用 Excel.Range() 时如何限制行选择的长度
【发布时间】:2012-08-22 01:45:15
【问题描述】:

我正在使用 VB.net 代码来操作 Excel 文档。我正在尝试获取包含在单个特定行中的一系列单元格。我不知道具体的结束单元格,我只需要该行中包含值的所有单元格。

这是我到目前为止所做的一个基本示例:

将 rngRange 调暗为 Excel.Range

将 wksXLWorksheet 调暗为 Excel.Worksheet

rngRange = wksXLWorksheet.Range("A1").EntireRow

我知道包含范围“A1”(单个单元格)的行是我想要的行,因此我使用 EntireRow 属性返回整行。它返回所有单元格,包括未使用的单元格,因此超过 16k 的单元格,其中大部分为空。

如何选择只有使用过的单元格的范围?我不想使用 UsedRange,因为它会抓住一切,我只想要一行,并且只想要单元格不再包含数据的位置。

另外,如果我选择这样一个有限的范围,它会对资源产生或多或少的影响吗?我假设选择小范围的影响较小,但我可能错了。

【问题讨论】:

    标签: vb.net excel


    【解决方案1】:

    使用 .End 属性,例如Range("A1").End(xlToRight).

    http://msdn.microsoft.com/en-us/library/office/ff839539.aspx

    【讨论】:

    • 谢谢,这很简单。我在一些在线文档中查看了最终属性,但是当它没有按我预期的方式工作时,我最终跳过了它;那是在我获得目前对范围的理解之前。谢谢!
    • @meltdownmonk -> 虽然这是一个很好的答案,但更好的解决方案可能是:rngRange = wksXLWorksheet.Cells(1, wksXLWorksheet.Range("A" & wksXLWorksheet.Columns.Count).End(xlToLeft).Column) 此语法从最后一列向左移动以找到 real行结束,从单元格 A1 开始,向右移动 xlToRight 将停在出现的第一个随机空白单元格处,如果有的话。
    • 我不认为这完全回答了这个问题...这只会返回该行中最后使用的单元格,而不是所有单元格。
    【解决方案2】:

    Excel.Application 对象有一个 Intersect 方法,工作表有一个 UsedRange 属性。

    Dim rngRange as Excel.Range
    Dim wksXLWorksheet As Excel.Worksheet
    Dim xlApp As Excel.Application = New Microsoft.Office.Interop.Excel.Application()
    
    rngRange = Excel.Intersect(wksXLWorksheet.Range("1:1"), wksXLWorksheet.UsedRange)
    

    或者,使用起点和终点定义范围,同时限定构成范围的单元格。

    Dim rngRange as Excel.Range
    Dim wksXLWorksheet As Excel.Worksheet
    
    rngRange = wksXLWorksheet.Range(wksXLWorksheet.Range("A1"), wksXLWorksheet.Range("XFD1").End(xlToLeft))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-13
      • 2020-11-23
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2015-11-23
      相关资源
      最近更新 更多