如何在没有任何数据行的 Excel 表/ListObject 中读取计算列的公式
Posted
技术标签:
【中文标题】如何在没有任何数据行的 Excel 表/ListObject 中读取计算列的公式【英文标题】:How to read formulas of Calculated Columns in an Excel Table/ListObject without any data rows 【发布时间】:2017-04-05 15:58:50 【问题描述】:我有一个带有外部查询的 ListObject 作为数据源,它返回 18 列。 ListObject 之前添加了额外的 4 个计算列。
目前,ListObject 有 0 个数据行,但是,虽然有 0 个数据行,但我似乎无法读取计算列的预定义公式。
如果我刷新数据源,并且数据源至少返回 1 行,则计算列的公式变得可读。同样,如果我在其中一个非计算列中手动输入数据,这样至少有一行,那么计算的列公式是可读的。
有没有办法确定计算列公式是什么不向列表对象添加任何数据?
【问题讨论】:
【参考方案1】:无论表格是否有行,这里都有一个解决方法。
getListColumnFormulae
- 在表格中添加一行
- 用所有 ListColumns 的公式填充一维基数为 1 的数组
- 删除行
- 返回数组
Function getListColumnFormulae(tbl As ListObject)
Dim Formulae
On Error Resume Next
With tbl.ListRows.Add
Formulae = Application.Transpose(.Range.Formula)
Formulae = Application.Transpose(Formulae)
getListColumnFormulae = Formulae
.Delete
End With
On Error GoTo 0
End Function
Sub FormulaeMessage()
Dim Data
Dim tbl As ListObject
Set tbl = Worksheets("Sheet2").ListObjects(1)
Data = getListColumnFormulae(tbl)
End Sub
【讨论】:
类似于我原来的解决方法“如果我在其中一个非计算列中手动输入数据”。显然公式存在于某处,但似乎对象模型并未公开它。 @ThunderFrame 请注意,与 您的原始解决方法 相比,此答案的方法有一个关键区别,事实上这种方法不需要任何关于哪些ListObject
字段 (LisColumns.Items
) 是未计算的 以及哪些字段 HasFormula
的先验知识,因为它本身不添加任何“数据”,而只是添加一行到DataBodyRange
以使LisColumns.Items
的“隐藏” 公式可见。以上是关于如何在没有任何数据行的 Excel 表/ListObject 中读取计算列的公式的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有任何重复行的情况下连接 cognos 中的两个表?