代码之家  ›  专栏  ›  技术社区  ›  nightwatch

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

  •  0
  • nightwatch  · 技术社区  · 7 年前

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

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

    返回电子表格也有问题——EPPlus不知道这些表达式中的内容以及它们的计算结果,也不知道它们是否引用了其他可能已经计算过的单元格。所以-没有依赖控制和可能的混乱。

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

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

    MYEVAL将在工作表中运行。Calculate()调用——但是在MYEVAL内部,如果E4和C4单元格是自己计算的,并且可以在计算过程中更改它们的值,如何告诉EPPlus我们想要E4和C4单元格的当前值?

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

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

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

    然后EPPlus就会知道,在调用MYEVAL之前,它必须计算E4和C4细胞。这是否足以强制执行此类依赖关系?

    1 回复  |  直到 7 年前
        1
  •  0
  •   nightwatch    7 年前

    好的,更新中给出的解决方案是好的/有用的,并且似乎有效。 但是还有一种非常简单的方法,也就是替代方法:你可以使用EPPlus api(worker.cells[i,j].calculate())计算单个单元格——然后你不需要管理依赖关系,只需调用你需要的单元格上的calculate,这将遵循实际的依赖关系。

    推荐文章