簡體   English   中英

Google Apps Script - onEdit 使用數組將數據從一張紙復制到另一張紙

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM