如何在 Google Sheet 上将公式从 "Parent Tab" 复制到 "Child Tab"

How to copy a formula from "Parent Tab" to "Child Tab" on Google Sheet

我正在我称为“模型”的“父选项卡”上做角色扮演角色表,在那里我掌握了我的公式。

我创建了第二个选项卡“Character1”和第三个选项卡“Character2”。但是当我尝试使用 =QUERY 或 =TEXTFORMULA 或其他任何东西时。它不会在实际电子表格上计算公式,它只是从“模型”选项卡中获取数据。

我唯一的方法实际上是 copy/past 我所有的公式,但如果我做错了,我每次都必须在每个电子表格中更正它。

是否可以有一个公式将单元格放在:

并在每个选项卡中自动生成相同的公式:

对不起,如果它模糊,我会尽力解释。

如果你的 sheet 被称为 MODELE 试试其他的 sheet 只是:

=MODELE!AE58

对于数组,它将是:

={MODELE!AE58:AE100}

也看看“命名范围”——也许您会发现它更方便

简单

尝试

function onEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  if (rng.getFormula() != '' && sh.getName() == 'MODEL') {
    var excl = ['MODEL', 'OTHER'];//excluded sheets
    SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sh => {
      if (!~excl.indexOf(sh.getSheetName())) {
        sh.getRange(rng.getA1Notation()).setFormula(rng.getFormula())
      }
    })
  }
}

当您在 MODEL 中更改公式时,这也会在除排除的选项卡之外的其他选项卡中更改

多个

如果您通过将公式拖动到模型中来编辑它们 sheet,请使用此模型,它允许您一次编辑所有公式

function onEdit(e) {
  var sh = e.source.getActiveSheet()
  if (sh.getName() != 'MODEL') return;
  for (var i = e.range.rowStart; i <= e.range.rowEnd; i++) {
    for (var j = e.range.columnStart; j <= e.range.columnEnd; j++) {
      if (sh.getRange(i, j).getFormula() != '') {
        var excl = ['MODEL', 'OTHER'];//excluded sheets
        SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(child => {
          if (!~excl.indexOf(child.getSheetName())) {
            child.getRange(sh.getRange(i, j).getA1Notation()).setFormula(sh.getRange(i, j).getFormula())
          }
        })
      }
    }
  }
}

全球

如果您需要重置所有公式,启用google sheets api 并尝试

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem(' Apply all formulas from MODEL to all tabs', 'spreadFormulas')
    .addToUi();
}
function spreadFormulas() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('MODEL')
  if (sh.getName() != 'MODEL') return;
  var data = [];
  var formulas = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getFormulas()
  for (var i = 0; i < formulas.length; i++) {
    for (var j = 0; j < formulas[0].length; j++) {
      if (formulas[i][j] != '') {
        var excl = ['MODEL', 'OTHER'];//excluded sheets
        SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(child => {
          if (!~excl.indexOf(child.getSheetName())) {
            data.push({
              range: `${child.getName()}!${columnToLetter(+j + 1) + (+i + 1)}`,
              values: [[`${formulas[i][j]}`]],
            })
          }
        })
      }
    }
  }
  if (data.length) {
    var resource = {
      valueInputOption: 'USER_ENTERED',
      data: data,
    };
    try { Sheets.Spreadsheets.Values.batchUpdate(resource, ss.getId()); } catch (e) { console.log(JSON.stringify(e)) }
  }
}
function columnToLetter(column) {
  var temp, letter = '';
  while (column > 0) {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}