EPPlus - C# 中的自定义函数 - 处理电子表格之外的单元格依赖项



我在做什么:向 EPPlus 运行时添加了一个自定义函数。此函数将文本表达式作为参数(当然,文本表达式可以指定为参数,也可以放在我们引用的电子表格的某个单元格中( 目前为止,一切都好

然后我们在 Excel/EPPlus 之外评估这个表达式 - 表达式可以访问电子表格之外的数据,但也可以引用其他电子表格单元格。

并且引用电子表格存在问题 - EPPlus 不知道这些表达式中的内容以及它们的评估结果是什么,也不知道它们是否引用了可能已经计算或可能尚未计算的其他单元格。所以 - 没有依赖控制和可能的混乱。

问题:这可以解决吗?我的意思是,当表达式计算函数检测到表达式引用电子表格单元格时,它是否可以告诉 EPPlus 首先计算该单元格?或者至少解析表达式并检测依赖关系是什么,然后以某种方式将此信息提供给 EPPlus,以便它知道以什么顺序运行计算?

=MYEVAL("doSomeStuff('arg 1', Sheet.E4, Sheet.C4)")

MYEVAL将在Worksheet.Calculate((调用期间运行 - 但是在MYEVAL内部,如何告诉EPPlus我们想要E4和C4单元格的当前值,如果这些单元格是自己计算的并且可以在计算过程中更改它们的值?

我不关心循环引用,可以确保没有循环,只是以正确的顺序运行计算的简单情况。

更新:只是想知道,如果我们可以在调用中添加任意数量的参数,我们是否可以将我们的依赖项放在参数列表中,如下所示:

=MYEVAL("doSomeStuff('arg 1', Sheet.E4, Sheet.C4)";E4;C4)

然后EPPlus会知道在调用MYEVAL之前,它必须计算E4和C4细胞。这足以强制实施此类依赖项吗?

好的,更新中提供的解决方案正常/有用,似乎可以工作。 但也有一个非常简单的方法,替代方案:你可以使用 EPPlus api (Worksheet.Cells[i, j].calculate((( - 然后你不需要管理依赖关系,只需在你需要的单元格上调用 Compute,这将遵循实际的依赖关系。

相关内容

最新更新