[英]I want to create a script for google sheets that will make multiple copies of a sheet and place the new sheets to the left of the active sheet
[英]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 工作。 其次,我很絕望,因為我找不到將行從存檔中刪除到其初始工作表的方法。 我想要的是:當維克多從存檔中取消選中該框時,該行將返回其工作表,而不是米里亞姆或伊莉莎的工作表。
非常感謝您的幫助!
更准確地說,你不應該這樣做,因為這會導致在同一個項目中擁有三個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.