如何在没有任何数据行的 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 中读取计算列的公式的主要内容,如果未能解决你的问题,请参考以下文章

excel表中如何大批量删除数据?

excel中,如何合把行的数据合并到列

如何在没有任何重复行的情况下连接 cognos 中的两个表?

解决java poi导出excel2003不能超过65536行的问题

如何在不丢失 SQL 中的任何行的情况下合并两个表?

数据库中的文字导入到excel中如何实现自动换行?