[英]When I combine 2 onEdit scripts, I keep getting a range error on Google sheets-Script Editor
我有一個共享的谷歌工作表,用作待辦事項列表。 我正在使用腳本編輯器。 我最初將所有內容移到第一張紙上的空行。隨着添加更多內容,我發現已完成的項目需要移動到第二張紙上。 我的原始代碼從第 6/F 列的任何輸入中移動了該行。 我嘗試添加一個觸發器以將第 7/G 列移動到工作表 2。這兩個代碼都可以自行工作,但我似乎無法將它們組合起來。
在研究了這個網站和其他網站后,我嘗試重命名 onEdit、Nesting、使用“我的功能”、錄制宏。 我收到相同的錯誤,但行會根據我編輯代碼的方式而改變。 “TypeError:無法讀取未定義 onEdit @ Done.gs:2 的屬性‘范圍’”
我想要達到的,
當任務被標記為完成時,它移動到工作表 2(第 7 列/G 類型“是”)當任務狀態更新時,它移動到工作表 1 上的空行(使用第 6 列/F 字詞 - 進行中,待審查,稍后)我還在尋找一門基礎課程,以開始了解 google 表格的腳本和宏。 我意識到我從中間開始,讓自己變得更難。 謝謝我感謝您的反饋和建議!
function onEdit(event) {
// assumes source data in sheet named Sheet1
// target sheet of move to named Sheet2
// test column with yes is col 7 or G
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Sheet1" && r.getColumn() == 7 && r.getValue() == "yes") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Sheet2");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
function onEdit(e) {
const row = e.range.getRow();
const col = e.range.getColumn();
const as = e.source.getActiveSheet();
if(as.getName() == "Sheet1" && col == 6 && row > 1 && !as.getRange(row,col).getValue()=='') {
const row_new = as.getRange(row,1,1,col);
row_new.copyTo(as.getRange(as.getLastRow()+1,1,1,col));
as.deleteRow(row);
}
}
嘗試這個:
function onEdit(e) {
e.source.toast('entry');//debug
var s = e.range.getSheet();
s.getRange('P1').setValue(JSON.stringify(e));//debug
if (s.getName() == "Sheet1" && e.range.columnStart == 7 && e.value == "yes") {
e.source.toast('cond1');//debug
var tsh = e.source.getSheetByName("Sheet2");
var trg = tsh.getRange(tsh.getLastRow() + 1, 1);
s.getRange(e.range.rowStart, 1, 1, s.getLastColumn()).copyTo(trg);
s.deleteRow(e.range.rowStart);
}
if (s.getName() == "Sheet1" && e.range.columnStart == 6 && e.range.rowStart > 1 && !e.value) {
e.source.toast('cond2');//debug
const row_new = s.getRange(e.range.rowStart, 1, 1, e.range.columnStart);
row_new.copyTo(s.getRange(s.getLastRow() + 1, e.range.columnStart));
s.deleteRow(e.range.rowStart);
}
}
我添加了我通常用來調試這些腳本的工具。 祝酒詞幫助我在編輯頁面時能夠確定代碼在哪里停止。 而包含 JSON.stringify(e) 的行我通常會在頁面頂部附近放置一些未使用的單元格,以便可以看到事件 object 的內部內容。
此代碼有效:)
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = event.source.getActiveSheet();
var row = event.range.getRow();
var col = event.range.getColumn();
var numColumns = activeSheet.getLastColumn();
if(activeSheet.getName() == "Sheet1" && col == 7 && event.value == "yes") {
var targetSheet = ss.getSheetByName("Sheet2");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
activeSheet.getRange(row, 1, 1, numColumns).moveTo(target);
activeSheet.deleteRow(row);
}
if(activeSheet.getName() == "Sheet1" && col == 6 && row > 1 && !activeSheet.getRange(row,col).getValue()=='') {
var rowNew = activeSheet.getRange(row,1,1,numColumns);
rowNew.copyTo(activeSheet.getRange(activeSheet.getLastRow()+1,1,1,numColumns));
activeSheet.deleteRow(row);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.