首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何计算Google文档中公式的数量?

如何计算Google文档中公式的数量?
EN

Stack Overflow用户
提问于 2020-03-31 07:27:23
回答 3查看 115关注 0票数 2

是否有一种方法可以计算复杂的Google文档(多选项卡)中的公式数

我已经使用诸如ARRAYFORMULA等函数重新编写了一个旧的模板,我非常想确定复杂度的降低--公式的数目是这个的一个代理。最初有成千上万的逐行、逐列复制/粘贴calcs。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-31 08:21:52

答案:

您可以在所有工作表中的所有单元格中获取所有公式,如果单元格以=字符开头,则将其添加到计数器中。

代码:

代码语言:javascript
运行
复制
function getAllFormulae() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var count = 0;
  
  for (var i = 0; i < ss.length; i++) {
    var currSheetValues = ss[i].getDataRange().getFormulas();
    for (var j = 0; j < currSheetValues.length; j++) {
      for (var k = 0; k < currSheetValues[j].length; k++) {
        if (currSheetValues[j][k].startsWith("=") == 1) {
          count++
        }
      }
    }
  }  
  return count;  
}
票数 1
EN

Stack Overflow用户

发布于 2020-03-31 22:41:57

我相信您希望检索Google电子表格中所有工作表中的单元格数,包括公式。如果我的理解是正确的,我想建议使用谷歌应用程序脚本。那么这个示例脚本如何?

我认为,当提出各种方法时,它们可能对用户有用。因此,我想提出以下两个示例脚本。

模式1:

在此模式中,从活动电子表格中检索所有工作表,并从每个工作表中检索包含公式的单元格数。为了计算元素的数量,二维数组是扁平的。

示例脚本:

代码语言:javascript
运行
复制
function myFunction() {
  const res = SpreadsheetApp
    .getActiveSpreadsheet()
    .getSheets()
    .reduce((n, s) => n += s.getDataRange().getFormulas().flat().filter(String).length, 0);
  console.log(res)
}

模式2:

在此模式中,使用TextFinder检索公式。在这种情况下,可以从活动电子表格中的所有工作表中检索所有公式,而无需使用循环过程。搜索的详细过程在Google端的内部服务器上运行。在我的环境中,该模式的流程成本低于模式1,在相同条件下,模式2的成本约为模式1的1/5。

示例脚本:

代码语言:javascript
运行
复制
function myFunction() {
  const res = SpreadsheetApp
    .getActiveSpreadsheet()
    .createTextFinder("^\\=")
    .matchFormulaText(true)
    .useRegularExpression(true)
    .findAll().length;
  console.log(res)
}

注意:

  • 这两种模式返回相同的结果。
  • 请使用启用V8运行脚本。

参考文献:

票数 2
EN

Stack Overflow用户

发布于 2020-03-31 12:09:31

使用getFormulas获取所有公式并计数不为空的所有元素:

代码语言:javascript
运行
复制
const getTotalFormulasCount = () =>
  console.log(getNumFormulas_(SpreadsheetApp.getActive().getSheets()));

/**
 * @param {GoogleAppsScript.Spreadsheet.Sheet[]|string[][]|string[]} arr Array of sheets or 1D or 2D array of formulas
 * @returns {number} count of formulas present in arr
 */
const getNumFormulas_ = arr =>
  arr.reduce(
    (count, el) =>
      count +
      (Array.isArray(el) //if el is array, recurse
        ? getNumFormulas_(el)
        : el.getRange //if el is sheet, recurse over it's formulas
        ? getNumFormulas_(el.getDataRange().getFormulas())
        : Number(el !== '')),
    0
  );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60945361

复制
相关文章

相似问题

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