【问题标题】:Parsing and extracting cell references from Excel formulas?从 Excel 公式中解析和提取单元格引用?
【发布时间】:2019-07-08 17:20:04
【问题描述】:

我希望从 Excel 公式中解析和提取单元格引用。假设我在单元格P5 中有以下公式:

=SUM(P1:P4)+Q3

我正在寻找公式所涉及的单元格位置的输出以产生答案,即P1P2P3P4Q3 作为输出(它们的位置/其他形式的表示也是可以接受的)。

我的问题是是否有这样的解析器可以实现这一点,如果没有,我应该采用什么技术。也许我作为示例列出的公式非常简单,理想情况下,我希望涵盖所有潜在的公式,甚至可能是那些在其他工作表和工作簿中有参考的公式。我期待并且真的希望有一个基于 VSTO C# 的解决方案,但我很难在 VSTO 库中找到一个甚至相关的功能。

【问题讨论】:

    标签: c# excel vba vsto


    【解决方案1】:

    对于简单的公式:

    Sub PrettyPoorParser()
        Dim r As Range, rr As Range
        With Range("D4")
            Set r = .DirectPrecedents
            msg = r.Count
            For Each rr In r
                msg = msg & vbCrLf & rr.Address(0, 0)
            Next rr
        End With
    
        MsgBox msg
    End Sub
    

    遗憾的是,这种简单的方法不适用于所有公式。它很容易被 INDIRECT() 的使用和表外引用所欺骗。

    编辑#1:

    它没有使用递归下降解析器,而是使用 Range 对象的属性。这个属性还不错,但不全面。关于在VBA-EXCEL环境下运行这段代码:

    宏非常易于安装和使用:

    1. ALT-F11 调出 VBE 窗口
    2. ALT-I ALT-M 打开一个新模块
    3. 粘贴内容并关闭 VBE 窗口

    如果您保存工作簿,宏将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

    要删除宏:

    1. 如上所示打开 VBE 窗口
    2. 清除代码
    3. 关闭 VBE 窗口

    要使用 Excel 中的宏:

    1. ALT-F8
    2. 选择宏
    3. 触摸运行

    要了解有关宏的更多信息,请参阅:

    http://www.mvps.org/dmcritchie/excel/getstarted.htm

    http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

    必须启用宏才能正常工作!

    几年前,我开始研究一个真正的解析器(作为调试工具),但后来被取消了。

    【讨论】:

    • 感谢您的回答。您能否为您的 VBA 代码添加更多解释?我不是 VBA 人,我更希望有一个 C# 解决方案,所以它可以帮助我继续使用它!此外,如何克服解决方案的限制的指针也将不胜感激。
    • @Zeruno 查看我的EDIT#1
    【解决方案2】:

    从公式中查找先例的完整解决方案具有挑战性:即使是 Excel 的先例工具也不能很好地解决这个问题。 对于使用 c# 的起点,请尝试 https://github.com/spreadsheetlab/XLParser

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多