[英]Google Apps Script - onEdit using an Array to Copy data one sheet to another
由於我的工作表名稱不斷更改,我想使用 onEdit 從一張工作表復制到另一張工作表超過 10 個標簽
我試圖修改下面的腳本來做我需要的,但就是找不到我哪里出錯了。
因此,如果有人選中了 10 個選項卡中任何一個的第 36 列中的框,則代碼將該行復制到主表
function CopyRange(e) {
var range = e.range;
var sheet = range.getSheet()[6, 16];
if (sheet.getSheetName() == [6, 16] && range.columnStart == 36 && range.rowStart >= 2 && e.value
== "TRUE") {
var [[]] = sheet.getRange(range.rowStart, 1, 1).getValues();
e.source.getSheetByName("Master").appendRow([]);
}
}
你的方法有幾個問題:
var sheet = range.getSheet()[6, 16];
不是切片數組的有效方法。 而是使用slice getSheets().slice(6,16)
。
sheet.getSheetName() == [6, 16]
這一行也是無效的。 您正在將名稱 ( String
) 與數組進行比較。 相反,您要檢查活動工作表的名稱是否屬於工作表名稱列表。 首先,您需要使用map獲取所有工作表名稱:
const all_sheets = e.source.getSheets().slice(6,16).map(sh=>sh.getName());
然后使用包含您可以檢查活動工作表的名稱是否屬於all_sheets
數組:
all_sheets.includes(active_sh.getName())
var [[]] = sheet.getRange(range.rowStart, 1, 1).getValues();
此行也無效。 您想要的是將數據存儲到變量中。 但首先您需要將其轉換為一維數組,因為這是appendRow
接受的參數類型。 因此,您需要將其平十:
const data = active_sh.getRange(row,1,1,active_sh.getLastColumn()).getValues().flat(); master_sh.appendRow(data);
最后,您可能希望將CopyRange
重命名為onEdit
以使其工作,除非您有一個可安裝的onEdit
觸發器附加到CopyRange
。
function onEdit(e) {
const row = e.range.rowStart;
const col = e.range.columnStart;
const master_sh = e.source.getSheetByName("Master")
const active_sh = e.source.getActiveSheet();
const all_sheets = e.source.getSheets().slice(6,16).map(sh=>sh.getName());
if(all_sheets.includes(active_sh.getName()) && col == 36 && row > 1 && e.value == 'TRUE'){
const data = active_sh.getRange(row,1,1,active_sh.getLastColumn()).getValues().flat();
master_sh.appendRow(data);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.