簡體   English   中英

嘗試合並兩個onEdit腳本(Google表格)

[英]Trying to combine two onEdit scripts (Google Sheets)

想知道是否有人可以提供幫助。

我目前有兩個腳本需要合並(以處理單個電子表格),第一個將已完成的行移至新工作表;

function onEdit(event) {
  // assumes source data in sheet named Current
  // target sheet of move to named Completed
  // test column with yes/no is col V
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Current" && r.getColumn() == 24 && r.getValue() == "Yes") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Complete");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

第二個基於值自動對行進行排序;

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 14;
  var tableRange = "A3:X150"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}

為了結合兩者,我提出了...。

function onEdit(event) {
  myFunction1(event);
  myFunction2();
}

function myFunction1(event) {
  // assumes source data in sheet named Current
  // target sheet of move to named Completed
  // test column with yes/no is col V
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Current" && r.getColumn() == 24 && r.getValue() == "Yes") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Complete");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
}

function myFunction2() {
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 14;
  var tableRange = "A3:X150"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}
}

第一個腳本有效,但是第二個腳本不起作用(不會自動排序),有人可以告訴我我要去哪里了嗎?

在此處鏈接到電子表格;

現在, myFunction2()myFunction1()內部。 如果將其移至它自己的外部函數,則onEdit()應該可以調用它。 如果您有需要在使用的變量myFunction1()再次然后叫myFunction2()你是對的在保持myFunction2()作為一個嵌套函數。

但是,您將需要在最后一個括號之前的末尾讓myFunction1()調用myFunction2() 在這種情況下,您只需要onEdit()調用myFunction1()運行整個代碼(就像onEdit()調用myFunction1()myFunction1()調用myFunction2()

因此,您的兩個選項應如下所示:

嵌套的:

function onEdit(event) {
  myFunction1(event);
  myFunction2();
}

function myFunction1(event) {
  // start of code
  if(condition == met) {
    //operation to follow
  } //closes if statement operations
} //***this is your misplaced bracket***

function myFunction2() {
  //start of code
  if(condition == met){   
    //operation to follow
  }
}

嵌套:

function onEdit(event) {
  myFunction1(event);
}

function myFunction1(event) {
  // start of code
  if(condition == met) {
    //operation to follow
  } //closes if statement operations; no close to myFunction1()

  function myFunction2() {
    //start of code
    if(condition == met){   
      //operation to follow
    } //closes if statement operation
  } //closes myFunction2()
  myFunction2(); //calls myFunction2() so that it will run after myFunction1() code
} // closes myFunction1()

簡而言之,您已經為myFunction2()設置並定義了所有內容,但尚未正式告知代碼執行這些操作。

嘗試這個

function onEdit(event) {
  myFunction1(event);
  myFunction2(event); // you forgotten to pass the event here
}
.
.
.
function myFunction2(event) {  // you forgotten to pass the event here
.
.
.
}

暫無
暫無

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

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