选择具有公式的单元格后,我们可以在Excel公式栏中选择其公式的一部分并计算它(通过按F9)。我需要通过JavaScript API重新评估子公式。评估公式的子公式
例如,让我们假设细胞A1
,B1
的值,C1
分别1
,2
,3
和Cell D1
包含公式=A1+B1+C1
。我希望能够快速评估子公式,如A1+B1
,B1+C1
,并获得结果3
和5
。
在VBA中,下manual
计算模式,我们可以的D1
初始式的子式(例如,=A1+B1
)存储在变量中,然后分配到D1
得到结果3
,然后还原回初始公式到D1
好像什么都没有发生;此评估不会提高D1
后代的任何其他单元的计算(感谢manual
模式)。
但是,使用JavaScript API时,重新计算仅适用于automatic
模式。如果我们将一个子公式(例如,=A1+B1
)分配给D1
,D1
后代的所有单元格都会被ctx.sync
重新计算,这可能很昂贵。
那么有没有一种方法或解决方法来优化?
一种可能的解决方法是在工作簿中找到没有单元依赖的单元格(例如工作表的usedRange
之外的单元格,但我们仍然需要确保没有单元格依赖于该单元格,原因是usedRange
...),然后为该单元格分配一个子公式并获取该值。这种方法的缺点是
1)它仍然是一个黑客,并修改工作表的区域。
2)用户定义的函数(如果编程不好)可能依赖于工作表的尺寸或单元的位置。在这种情况下,评估孤立单元中的用户定义函数可能会导致原始单元中的评估产生不同的结果(或副作用)。
任何人都可以帮忙吗?
我很想了解更多关于您正在使用如此多的功能和API功能的这个加载项。如果您想演示或分享您的想法,请通过[email protected]与我联系,并提供我的工作电子邮件地址。谢谢! –
感谢您的关注和感谢@MichaelZlatkovsky不断回答我的问题。我认为这是一个特权,可以直接与微软团队联系,并且非常感谢。实际上,我之前已经在OCaml中开发了一个“引擎”,并且一个月后我一直在开发Excel JavaScript加载项作为“接口”。我已经提交了2个,并且正在开发第三个(所以不是所有的功能都集成在一个插件中)。当我认为我的加载项是可表达的,我很乐意继续与你们密切合作(并远程)... – SoftTimur