计算公式的子公式

2024-03-17

选择有公式的单元格后,我们可以在Excel公式栏中选择其公式的一部分并进行计算(按F9)。我需要通过 JavaScript API 重现子公式的计算。

例如,假设 Cell 的值A1, B1, C1分别是1, 2, 3,和细胞D1包含一个公式=A1+B1+C1。我希望能够快速评估子公式,例如A1+B1, B1+C1,并得到结果3 and 5.

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

然而,使用 JavaScript API,重新计算仅在以下情况下有效automatic模式。如果我们分配一个子公式(例如,=A1+B1) to D1,所有的后代细胞D1重新计算为ctx.sync,这可能会很昂贵。

那么有没有办法或解决方法来优化它呢?

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

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

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

有人可以帮忙吗?


我认为您列出的第一种方法可能是最简单的。即,重新读取单元格的公式并将其保存为 JavaScript 变量(字符串)。接下来修改适当的公式,对值发出负载,然后将公式恢复为保存字符串。这种方法唯一真正的缺点是你会弄乱某人的公式,这意味着如果步骤 1 和步骤 2 之间出现问题,你会使文档处于脏状态。而且,正如您所说,它可能会对计算产生下游影响(性能方面)。

或者,如果你实际上know有哪些公式,您可以使用“工作表函数”功能。例如,此处您要计算 20 的总和 + 两个工作表范围的总和。

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);
});

这是“最干净”的计算方式,因为它不会影响工作表状态,您甚至可以链接计算:

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(以及数组公式),并且您需要预先知道单元格由哪种公式组成。但是,如果您正在谈论计算公式的子公式,我假设您已经了解了其中公式的一些信息,因此后者可能不是问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算公式的子公式 的相关文章

  • ms-access 本地化和默认布尔值

    我们的访问客户端即时生成 SQL 插入 更新和删除指令 并在 MS SQL Server 上发送 大多数用户拥有 Access 2007 的运行时版本 少数用户使用完整的 MS Access 版本 2003 或 2007 今天早上 我们国外
  • 自动加载 Word 任务窗格 Office 加载项

    我们正在为内部组织文档开发 Word 任务窗格 Office 加载项 不是 VSTO 在 Word 2013 桌面版 中 当我们插入加载项并保存文档时 当我们重新打开该文档时 加载项会自动加载 在 Word Online 中 此行为有所不同
  • auth.getAccessTokenAsync 的 Outlook 插件错误代码 13005

    所以我尝试在 Outlook 插件中使用单点登录 我已在以下位置注册了我的应用程序https apps dev microsoft com https apps dev microsoft com 在我的清单中我有
  • Outlook JS Addin - 撰写表单 - 如何检查事件/消息是否已保存?

    Outlook 加载项 office js 的撰写表单中是否有一种方法可以检查表单后面的对象 在我的例子中是日历事件 是否已保存 检查物品ID 如果未定义 则消息未存储 如果存在 则消息来自草稿 请参阅Office context mail
  • 循环遍历 MS Project 的每个字段

    我试图循环遍历我的 MS Project 文件中的每个字段并收集有关该字段的信息 自定义名称是特定的 做到这一点最简单的方法是什么 Thanks 要获取字段的自定义名称 您需要字段常量并循环遍历所有字段 您需要存储所有字段常量的列表 htt
  • 无法在 Excel for Windows 加载项的任务窗格中编辑 CodeMirror 或 Ace

    我刚刚意识到我们无法在 Excel for Windows 加载项的任务窗格中修改 CodeMirror 或 Ace 中的文本 我做了一个测试 html 页面这段代码 https jsbin com bivezolayo 5 edit ht
  • 更多 C# 自动转换为 Excel

    这将启动一个新的 Excel 工作簿 Excel Application oXL Excel Workbook oWB oXL new Excel Application oXL Visible true oWB Excel Workboo
  • 添加图片到word文档

    我写了一个下面简单的word插件来将图像插入到word文档中 但是当我执行此代码时 图像不会添加到文档中 var img data image png base64 iVBORw0KGgoAAAANSUhEUgAAAH4AAAAsCAMAA
  • 没有office可以安装Office 2007 PIA吗

    首先 我的问题与 没有 Office 2007 是否可以部署 Office 2007 PIA https stackoverflow com questions 370407 is office 2007 pia deployment po
  • 在 PowerPoint 中重命名对象

    可能是一个非常愚蠢的问题 但我不知道如何在 PowerPoint 中重命名对象 例如 我所有的图表默认称为 图表 1 等 有人可以帮我吗 谢谢 在 PowerPoint 2007 中 您可以从 选择 窗格执行此操作 要显示选择窗格 请单击功
  • 我应该搜索哪些组件 ID 来检测是否安装了 Office 2010 PIA

    我正在为 Office 2010 创建插件 需要在安装时检测是否安装了 Office 2010 PIA 我已经在 2003 年和 2007 年完成了此操作 但找不到 2010 年的组件 ID 有人知道它们是什么吗 谢谢 埃德 从下面的列表中
  • 程序太大

    我收到此错误消息 Procedure too large 在 VBA 中 这个错误的原因和解决办法是什么 您可能有一个或多个巨大的过程 函数 我认为 VBA 每个过程的限制为 64k 或其他值 您可以通过将该过程拆分为多个过程来修复此问题
  • 在 Office 加载项清单中指定 ~remoteAppUrl 的值

    我正在使用 Outlook 编写一个加载项新框架 http dev office com docs add ins overview office add ins 项目模板中的清单使用 remoteAppUrl来表示网页文件的位置 它在开发
  • 是否可以自动化即点即用应用程序?

    我有一个小型应用程序 可以通过 COM OLE 自动化实现 Microsoft Word 的自动化 不幸的是 这不适用于虚拟化的即点即用版本的 Word 因为它们在注册表中没有所需的密钥 至少不是预期的位置 换句话说 CreateObjec
  • 如何使用 apache poi 检查 .xlsx 文件中的单元格文本是否有删除线

    我需要检查单元格的文本格式 xlsx文件 Microsoft Excel 文件 是删除线或不使用阿帕奇兴趣点图书馆 看下图 请检查此图片 https i stack imgur com beg4M png 我需要检查 B3 单元格文本是否为
  • MS 缺少 VSTO 4.0 运行时下载?

    我们有代码检查 VSTO 4 0 运行时是否存在并下载 如果丢失 直到今天这一切都运作良好 MS 中的 VSTO 运行时文件似乎丢失了 有人对这个有了解吗 我们能否告诉客户这是 MS 问题并且很快就会得到解决 Google 没有找到任何有关
  • 消除启动时的安全警告

    打开任何 MS Access 数据库时 都会出现安全警告 指出该文件可能对计算机有害 但是 有没有办法删除此消息 或者它应该仍然是一种必要的罪恶 您也许可以签署您的程序 我不确定 读本文 http www howto outlook com
  • 在 MS Excel 中为字符分配一个值并执行字符串(具有字符)的数学函数(+、-、*、/)

    我想根据给定字符串 ABCDEF 的预分配值对其进行求和 即首先我想为每个字符分配值 然后计算具有预先分配的字符的字符串的总值 excel中可以实现这个功能吗 例如 在下面 A 2 B 5 C 8 D 1 E 1 F 2 sum of AB
  • Word 插件 - 如何读取自定义文档属性

    我正在使用 Office JS API 开发 Word 插件 目前 我可以通过执行以下操作向 Word 文档添加自定义属性 context document properties load context document properti
  • 如何从办公文档迁移到基于现代网络技术的文档 - 欢迎建议

    目前 所有文档均基于 MS Office 如果您想集成某些功能 这将变得非常具有挑战性 然后您可以选择使用 VBA 或 VSTO 第一个不太舒服 第二个可能就像拿大锤敲碎坚果一样 简单的控件 隐藏文本或基本数学等简单的事情都可以通过 HTM

随机推荐