如何将 sheet 数据复制到另一个数据,同时在操作时保持同步?

How to duplicate sheet data to another while maintaining synchronous when manipulated?

我目前有 sheet1 存储所有主要数据,我想将数据复制到 sheet2、sheet3 等等。我用来将 sheet1 复制到其他 sheet 的当前代码是:

=IMPORTRANGE("sheetID","Sheet1!A1:Z")

虽然它会在 sheet 之间保持数据同步,但问题是当您尝试编辑已导入的 sheet 时 =IMPORTRANGE 它会显示

#REF!

"Array result was not expanded because it would overwrite data in CELL VALUE."

那么有没有办法让所有 sheet 在同时编辑时同步?

编辑:使用 google 脚本或公式都可以。

尝试在 AppScript 中执行此操作:

function copySheet1(){ //Run this once to copy Sheet1 to all the others

  var sprsheet = SpreadsheetApp.openById("sheet-id");
  var all_sheets = sprsheet.getSheets();

  var values = all_sheets[0].getRange("A1:Z").getValues(); //Get values of Sheet1

  for (var i = 1; i < all_sheets.length; i++){
    all_sheets[i].getRange("A1:Z").setValues(values);

 }
}

function onEdit(e) { //This will run with any sheet you edit

  var edited_sheet = e.source.getSheetName(); //Gets the name of the sheet edited
  var all_sheets = e.source.getSheets();

  var range = e.range.getA1Notation(); //Gets the Cell you edited
  var cell_value = e.range.getValue(); //Gets the value of the cell

  for (var i = 0; i < all_sheets.length; i++){ //Iterates over all the sheets and copies the value to the same cell for each one
    var sheet = all_sheets[i];

    if (sheet.getSheetName() != edited_sheet){ //There is no need to rewrite the cell of the sheet edited
      sheet.getRange(range).setValue(cell_value);
    }
  }
}