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