簡體   English   中英

當我想取消歸檔(谷歌表)時,歸檔不同工作表中的行並將它們刪除到初始 position(到初始工作表)

[英]Archive rows from different sheets and remove them to initial position (to initial sheet) when I want to unarchive (google sheets)

我在同一個電子表格中有 4 張工作表:每位員工 3 張(Elisa、Miriam、Victor)和 1 張用於存檔(Archive)。 項目完成后,每個員工都可以通過復選框(數據驗證)歸檔整行(感謝以下腳本)。 該行被刪除到名為“存檔”的工作表中。

function onEdit(event) {
  // assumes source data in sheet named main
  // target sheet of move to named Completed
  // getColumn with check-boxes is currently set to column 2 or B
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Elisa" && r.getColumn() == 2 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  } else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Elisa");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

我保存了這個腳本,它在腳本編輯器的“存檔 - Elisa”下工作。

我面臨2個問題。 首先,我為其他員工復制了這個腳本,並將每個腳本保存在腳本編輯器的“Archive - NameEmployee”下。 當我運行腳本時,它對 Miriam 或 Victor 不起作用:因此,如果我選中 Miriam 或 Victor 工作表中的一個框,該行不會移動到存檔。 這只是為 Elisa 工作。 其次,我很絕望,因為我找不到將行從存檔中刪除到其初始工作表的方法。 我想要的是:當維克多從存檔中取消選中該框時,該行將返回其工作表,而不是米里亞姆或伊莉莎的工作表。

非常感謝您的幫助!

第一:如果您想為 Miriam 和 Victor 運行相同的腳本 - 您不需要制作腳本的副本。

更准確地說,你不應該這樣做,因為這會導致在同一個項目中擁有三個onEdit函數,這是不允許的。

此外,復制腳本並將其保存在其他員工的名下不會使其適用於他們。

相反,您需要修改腳本。

if(s.getName() == "Elisa" && r.getColumn() == 2 && r.getValue() == true) {

指定僅當工作表名稱為“Elisa”時才歸檔該行。 為了使它適用於其他員工,請將其修改為:

if((s.getName() == "Elisa"||s.getName() == "Victor"||s.getName() == "Miriam" )&& r.getColumn() == 2 && r.getValue() == true) {

第二:

var targetSheet = ss.getSheetByName("Elisa"); 指定該行應移回的工作表是“Elisa”。

如果您希望它移動到創建此行的人的工作表 - 此行必須包含有關其創建者的一些信息。 有嗎? 如果沒有,您必須在所有指定創建者的工作表中實現一個附加列。

如果創建者名稱存儲在 S 列中,您可以更改代碼的else語句,如下所示:

else if(s.getName() == "Archive" && r.getColumn() == 2 && r.getValue() == false) {
    var row = r.getRow();
    var nameColumn = 19;
    var name = s.getRange(row, nameColumn).getValue();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName(name);
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }

基本上,您檢索行創建者的名稱

var name = s.getRange(row, nameColumn).getValue();

然后將變量的內容傳遞給

var targetSheet = ss.getSheetByName(name); .

因此,targetsheet 將根據行動態建立。

暫無
暫無

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

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