如何获取Excel大纲当前的显示层级?
Excel获取当前大纲显示层级的解决方案
问题描述
Excel支持通过Outline.ShowLevels方法设置大纲的显示层级,但没有直接的属性(类似Outline.Levels)来获取当前实际显示的层级。目前采用辅助单元格区域.Range("OutlineLevel")保存层级的方案存在两个明显弊端:
- 大纲初始显示的层级数可能与单元格中保存的数值不一致
- 单元格保存的层级可能超过大纲实际支持的最大层级,因为无法直接获取这个最大值
实现方法
Excel确实没有公开的直接属性用于获取当前大纲显示层级,但可以通过遍历行/列的大纲状态来计算当前显示的最高层级,同时也能获取大纲的最大层级。
1. 获取当前显示的行大纲层级
通过检查每一行的OutlineLevel属性,结合该行的可见状态,判断当前显示的最高层级:
Function GetCurrentRowOutlineLevel(ws As Worksheet) As Integer Dim maxVisibleLevel As Integer maxVisibleLevel = 0 Dim r As Range For Each r In ws.UsedRange.Rows If r.Hidden = False Then If r.OutlineLevel > maxVisibleLevel Then maxVisibleLevel = r.OutlineLevel End If End If Next r GetCurrentRowOutlineLevel = maxVisibleLevel End Function
2. 获取行大纲的最大层级
遍历所有行的OutlineLevel属性,取最大值即可得到大纲的最大层级:
Function GetMaxRowOutlineLevel(ws As Worksheet) As Integer Dim maxLevel As Integer maxLevel = 0 Dim r As Range For Each r In ws.UsedRange.Rows If r.OutlineLevel > maxLevel Then maxLevel = r.OutlineLevel End If Next r GetMaxRowOutlineLevel = maxLevel End Function
3. 列大纲的对应方法
如果需要处理列方向的大纲,只需将代码中的Rows替换为Columns:
Function GetCurrentColumnOutlineLevel(ws As Worksheet) As Integer Dim maxVisibleLevel As Integer maxVisibleLevel = 0 Dim c As Range For Each c In ws.UsedRange.Columns If c.Hidden = False Then If c.OutlineLevel > maxVisibleLevel Then maxVisibleLevel = c.OutlineLevel End If End If Next c GetCurrentColumnOutlineLevel = maxVisibleLevel End Function Function GetMaxColumnOutlineLevel(ws As Worksheet) As Integer Dim maxLevel As Integer maxLevel = 0 Dim c As Range For Each c In ws.UsedRange.Columns If c.OutlineLevel > maxLevel Then maxLevel = c.OutlineLevel End If Next c GetMaxColumnOutlineLevel = maxLevel End Function
使用说明
调用上述函数时,传入目标工作表对象即可得到对应的值,以此替代辅助单元格方案,解决初始层级不一致和层级超标的问题。
内容的提问来源于stack exchange,提问作者Uno que busca
相关产品推荐
相关产品推荐

