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

时间:2018-08-24 20:20:29

标签: epplus

我在做什么:向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电池。这样足以加强这种依赖性吗?

1 个答案:

答案 0 :(得分:0)

确定,更新中提供的解决方案正常/有用,并且似乎可以正常工作。 但是,还有一种非常简单的方法可供选择:您可以使用EPPlus api(Worksheet.Cells [i,j] .Calculate())计算单个单元格-然后您无需管理依赖项,只需对单元格调用Calculate您需要的,这将遵循实际的依赖关系。