google-apps-script - Google Sheets 在不断变化的工作表数量上对单元格求和

标签 google-apps-script google-sheets sum google-sheets-formula

我正在尝试将电子表格从 Excel 转换为 Google 表格。 大多数公式都按预期工作,但以下公式除外:

=SUM('J Slater:Job Sheet'!C6)

我使用它对一系列工作表上的特定单元格进行求和,该公式允许在该范围之间添加工作表,也可以将其添加到求和单元格中,而无需对公式进行任何更改。我找不到在 Google 表格中复制此内容的方法。

最佳答案

您可以使用 Google 表格中的自定义 Apps 脚本功能来执行此操作:

脚本:

/**
 * @returns {Number} Sum of all values from startSheet to endSheet of particular cell range
 * @customfunction
 *
 * @param {String} startSheet name like "Sheet1"
 * @param {String} endSheet name (inclusive) like "Sheet3"
 * @param {String} cell range like "A2" or "A2:A5" or "A2:B5" for adjacents
 */
function SUMSHEETS(startSheet, endSheet, range) {
  if ([...arguments].some(arg => typeof arg !== 'string' || arg === ''))
    throw new Error('All arguments must be non-empty strings');
  const [addValue, getOutput] = (() => {
    let output = 0;
    return [
      (sh) => {
        let values = sh.getRange(range).getValues();
        values = values.flat(); // ranges like A2:A5 are 1D array of (numbers or empty strings), ranges like A2:B5 are 2D array so 2D -> 1D
        values.forEach(function(value) {
          output += Number(value);
        });
      },
      () => output,
    ];
  })();
  let toggle = 0;
  const end = SpreadsheetApp.getActive()
    .getSheets()
    .some(sheet => {
      if (toggle) addValue(sheet);
      switch (sheet.getName()) {
        case startSheet:
          toggle = 1;
          addValue(sheet);
          break;
        case endSheet:
          return true;
      }
    });
  if (!toggle || !end) throw new Error('Start or end sheet(s) not found!');
  return getOutput();
}

用法:

=SUMSHEETS("J Slater","Job Sheet","C6")

将工作表“J Slater”中的 C6 求和到工作表“Job Sheet”。

关于google-apps-script - Google Sheets 在不断变化的工作表数量上对单元格求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60364340/

相关文章:

google-apps-script - 保护电子表格免于在 Google 表格中重命名

javascript - 将多个工作表名称传递到数组中 Google App 脚本不适用于时间戳函数

javascript - D3 插入 H3 标签 Google 表格

google-apps-script - 是否可以为多个电子表格使用一个脚本?

javascript - 使用javascript计算数组中的数字总和

python - pandas 中 group by 的条件比率

google-apps-script - 授权我创建的 Google 脚本时遇到问题

javascript - 使用谷歌应用程序脚本删除谷歌表格中的所有过滤器

javascript - 使用 Google 脚本删除行将破坏另一个工作表中的引用

java - 我被困在 Java 中的第一个 hackerrank 挑战中