首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算公式的子公式

计算公式的子公式
EN

Stack Overflow用户
提问于 2016-07-12 12:49:48
回答 1查看 264关注 0票数 0

在选择有公式的单元格后,我们可以在Excel公式栏中选择它的一部分公式并计算它(通过按F9)。我需要通过JavaScript API复制子公式的评估结果。

例如,假设单元格A1B1C1的值分别为123和CellD1包含公式=A1+B1+C1。我希望能够快速评估一个子公式,如A1+B1B1+C1,并得到结果35

在VBA中,在manual计算模式下,我们可以将D1的初始公式存储在一个变量中,然后将一个子公式(例如,=A1+B1)分配给D1,以得到结果3,然后将初始公式恢复到D1,就像什么都没有发生一样;此评估不会增加对D1后代的任何其他单元的计算(感谢manual模式)。

然而,使用JavaScript API,重新计算只能在automatic模式下工作.如果我们将一个子公式(例如,=A1+B1)分配给D1,那么所有D1的后代细胞都会被ctx.sync重新计算,这可能会很昂贵。

那么,有什么办法或解决办法来优化这一点呢?

一个可能的解决方法是在工作簿中找到一个没有单元格依赖的独立单元(例如,工作表的usedRange之外的一个单元,但由于usedRange的性质,我们仍然需要确保没有任何单元格依赖于它),然后给该单元格分配一个子公式并得到值。这种方法的缺点是

1)它仍然是一个黑客,并且修改工作表的区域。

2)用户定义的函数(如果编程不当)可能依赖工作表的尺寸或单元格的位置。在这种情况下,在隔离单元中评估用户定义的功能可能会导致与原始单元中的评估不同的结果(或副作用)。

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-12 17:22:05

我认为你列出的第一个方法可能是最简单的。也就是说,读取单元格的公式并将其保存为javascript变量(string)。接下来,在适当的位置修改公式,对值发出一个加载,然后将公式还原回保存字符串。这种方法唯一真正的缺点是,您正在处理某人的公式,这意味着,如果在步骤1和步骤2之间出错,那么文档就会处于脏状态。而且,正如你所说,它可能会对计算产生下游影响(从纵向上看)。

或者,如果您确实知道存在哪些公式,则可以使用“工作表函数”功能。例如,这里计算的是20 +两个工作表范围的和。

代码语言:javascript
复制
Excel.run(function (ctx) {
    var result = ctx.workbook.functions.sum(
        20,
        ctx.workbook.worksheets.getItem("Sheet1").getRange("F3:F5"),
        ctx.workbook.worksheets.getItem("Sheet1").getRange("H3:H5")
    ).load();

    return ctx.sync();
}).catch(function(e) {
    console.log(e);
});

这是“最干净”的计算方法,因为它不影响工作表状态,甚至可以连锁计算:

代码语言:javascript
复制
Excel.run(function (ctx) {
    var range = ctx.workbook.worksheets.getItem("Sheet1").getRange("E2:H5");

    var sumOfTwoLookups = ctx.workbook.functions.sum(
        ctx.workbook.functions.vlookup("Wrench", range, 2, false),
        ctx.workbook.functions.vlookup("Wrench", range, 3, false)
        );
    sumOfTwoLookups.load();

    return ctx.sync();
}).catch(function(e) {
    console.log(e);
});

它的缺点是,这不适用于UDF(以及数组公式),而且您需要事先知道单元格是由哪种公式组成的。但是如果你说的是计算公式的子公式,我假设你已经有一些关于公式的信息,所以后者可能不是一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38329416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档