簡體   English   中英

使用復選框和腳本將行從多張工作表移動到一張工作表

[英]Moving rows from multiple sheets with checkbox and script to one sheet

在這個偉大社區的幫助下,我制作了一個腳本,我可以通過單擊 A 列中的復選框將一行移動到另一個工作表。 使用一個腳本將文本從一行中的單元格復制到另一個工作表中

我需要更多具有此復選框功能的工作表。 即Ark2、Ark3等。 所有人都應該將行中的數據移動到“Sick”表而不覆蓋現有數據。

從我現有的腳本中,只有一張“Ark1”工作表正在運行,如果我只是復制腳本並替換工作表上的名稱,我相信它會在“Sick”表中覆蓋。

這是我正在使用的腳本。

function main(row) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Ark1');
  var [v, d] = s.getRange(`B${row}:C${row}`).getValues()[0];
  var s2 = ss.getSheetByName('Sick');
  var timeZone = ss.getSpreadsheetTimeZone();
  var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
  s2.getRange(`A${row}:C${row}`).setValues([[t,v,d]]);
}

function onEdit(e) {
  const range = e.range;
  if (range.getSheet().getSheetName() == "Ark1" && e.value == "TRUE") {
    main(range.rowStart);
    range.uncheck();
  }
}

可以在此處找到我的工作表的可編輯測試版本: https : //docs.google.com/spreadsheets/d/1z5TGWp3N002z0GNts4NRyspkjXcsN52rxPtx8Pu9D70/edit#gid=1278602995

正如你所知道的,我是這里的新手 - 但正在慢慢進步......

回答:

您需要獲取編輯過的 Sheet 的名稱而不是指定“Ark1”,並使用getLastRow()方法將其添加到“Sick”表的底部。

代碼更改:

function main(range) {
  var row = range.rowStart;
  var s = range.getSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var [v, d] = s.getRange(`B${row}:C${row}`).getValues()[0];
  var s2 = ss.getSheetByName('Sick');
  var timeZone = ss.getSpreadsheetTimeZone();
  var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
  s2.getRange(`A${s2.getLastRow() + 1}:C${s2.getLastRow() + 1}`).setValues([[t,v,d]]);
}

function onEdit(e) {
  const range = e.range;
  if (range.getSheet().getSheetName() != "Sick" && e.value == "TRUE") {
    main(range);
    range.uncheck();
  }
}

我希望這對你有幫助!

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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