2016-06-04 4 views
0

Ich bin neu bei Google Scripts und versuche, einige Prozesse in Google Spreadsheets zu automatisieren. Ich habe eine Möglichkeit gefunden, eine Zeile basierend auf dem Wert in einer bestimmten Spalte von einem Blatt zu einem anderen zu verschieben. Aber damit es über mehrere Blätter hinweg funktioniert, habe ich den Code für jedes Blatt dupliziert. Ich bin mir sicher, dass es einen Weg geben muss, dies zu vereinfachen, aber ich bleibe stecken. Siehe meinen Code unten.Google Script zum Ansehen mehrerer Blätter: Wie vereinfache ich dieses Skript?

function onEdit() { 
// moves a row from a sheet to another when a magic value is entered in a column 
// adjust the following variables to fit your needs 
// see https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion 

var sheetNameToWatch = "BRG"; 

var columnNumberToWatch = 3; // column A = 1, B = 2, etc. 
var valueToWatch = "done"; 
var sheetNameToMoveTheRowTo = "Done"; 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = SpreadsheetApp.getActiveSheet(); 
var range = sheet.getActiveCell(); 


if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) { 

var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo); 
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange); 
sheet.deleteRow(range.getRow()); 
} 

var sheetNameToWatch = "Lesotho"; 

var columnNumberToWatch = 3; // column A = 1, B = 2, etc. 
var valueToWatch = "done"; 
var sheetNameToMoveTheRowTo = "Done"; 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = SpreadsheetApp.getActiveSheet(); 
var range = sheet.getActiveCell(); 


if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) { 

var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo); 
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange); 
sheet.deleteRow(range.getRow()); 
} 


var sheetNameToWatch = "Bosman"; 

var columnNumberToWatch = 3; // column A = 1, B = 2, etc. 
var valueToWatch = "done"; 
var sheetNameToMoveTheRowTo = "Done"; 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = SpreadsheetApp.getActiveSheet(); 
var range = sheet.getActiveCell(); 


if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) { 

    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo); 
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange); 
sheet.deleteRow(range.getRow()); 
} 

} 

Antwort

0

Dies sollte es tun. Es erstellt ein Array aller Blattnamen nicht gleich „Erledigt“ und dann Ihren Code einer Schleife durch, um zu sehen, ob ein Blatt mit „done“ in Spalte C

function onEdit() { 
var columnNumberToWatch = 3; // column A = 1, B = 2, etc. 
var valueToWatch = "done"; 
var sheetNameToMoveTheRowTo = "Done"; 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = SpreadsheetApp.getActiveSheet(); 
var range = sheet.getActiveCell(); 

var sheetNameToWatch=[] //Array of Sheet names 
var names = ss.getSheets() 
    for(j=0;j<names.length;j++) { 
    var n= names[j].getSheetName(); 
     if(n!="Done"){ //If Sheet name not "Done" add to array 
     sheetNameToWatch.push(n) 
    }} 
for(i=0;i<sheetNameToWatch.length;i++){ 
if (sheet.getName() == sheetNameToWatch[i] && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) { 
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo); 
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
sheet.getRange(range.getRow(), 1, 1,  sheet.getLastColumn()).moveTo(targetRange); 
sheet.deleteRow(range.getRow()); 
}} 
} 
+0

bearbeitet wurde Diese Antwort ist ausgezeichnet, weil das Skript kann jetzt auf jede Tabelle angewendet werden. Es funktioniert perfekt. –

Verwandte Themen