如何将 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);
}
}
}
我目前有 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);
}
}
}