簡體   English   中英

當我結合 2 個 onEdit 腳本時,我在 Google 表格腳本編輯器上不斷收到范圍錯誤

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

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