So habe ich zwei Zeitpläne, die in Zeile und Spalte und Platzierung von Zellen identisch sind. Es gibt Zellen, die immer konstant sind, aber es gibt andere, bei denen sich die Felder ändern. Also habe ich ein benutzerdefiniertes Menü-Skript, das eines der zwei identischen Blätter aufruft und die vordefinierten Zellen löscht. Auf der Skriptseite kopiere/kopiere ich im Prinzip das gleiche Skript zweimal und ändere den Namen des Active Sheets. Ich fühle mich jedoch so überflüssig. Gibt es eine Möglichkeit, dass ich nur ein Skript haben kann und je nachdem, welchen Menüpunkt ich auswähle, wird der entsprechende Zeitplan gelöscht?Google Skript kompakter machen (Skript zum Löschen von Inhalten)
Dies ist das benutzerdefinierte Menü Skript
function resetsheetbutton() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Advanced Menu')
.addSubMenu(ui.createMenu('Reset Schedule')
.addItem('Schedule 1', 'resetschedule1')
.addSeparator()
.addItem('Schedule 2', 'resetschedule2'))
.addToUi();
}
Dies ist das Skript Schedule auszulöschen 1
function resetschedule1(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('Notification'));
var sheet = spreadsheet.getActiveSheet();
var spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet1.getSheetByName('Schedule 1'));
var sheet1 = spreadsheet1.getActiveSheet();
var startRow = 2;
var lastRow = 80;
var range = sheet.getRange(2,11,lastRow-startRow+1,1);
var numRows = range.getNumRows();
var reset = range.getValues();
for (var i = 0; i < numRows; i++) {
var row = reset[i];
sheet1.getRange(row).clearContent();
}
sheet1.getRange('C3').setValue('Insert new Date here');
sheet1.getRange('D3').setValue('Insert this week's task');
sheet1.getRange('D29').setValue('Insert this week's task');
sheet1.getRange('D55').setValue('Insert this week's task');
sheet1.getRange('D81').setValue('Insert this week's task');
sheet1.getRange('D107').setValue('Insert this week's task');
sheet1.getRange('C6').setValue('=C5');
sheet1.getRange('C25').setValue('=C5');
sheet1.getRange('C32').setValue('=C31');
sheet1.getRange('C51').setValue('=C31');
sheet1.getRange('C58').setValue('=C57');
sheet1.getRange('C77').setValue('=C57');
sheet1.getRange('C84').setValue('=C83');
sheet1.getRange('C103').setValue('=C83');
sheet1.getRange('C110').setValue('=C109');
sheet1.getRange('C129').setValue('=C109');
}
Dies ist exakt das gleiche Skript für Zeitplan 2, außer es Punkte 2. planen Ich benenne das Blatt speziell, anstatt es das aktive Blatt löschen zu lassen, so dass die Person, die den Plan löscht, nicht versehentlich den falschen Plan löscht.
function resetschedule2(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName('Notification'));
var sheet = spreadsheet.getActiveSheet();
var spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet1.getSheetByName('Schedule 2'));
var sheet1 = spreadsheet1.getActiveSheet();
var startRow = 2;
var lastRow = 80;
var range = sheet.getRange(2,11,lastRow-startRow+1,1);
var numRows = range.getNumRows();
var reset = range.getValues();
for (var i = 0; i < numRows; i++) {
var row = reset[i];
sheet1.getRange(row).clearContent();
}
sheet1.getRange('C3').setValue('Insert new Date here');
sheet1.getRange('D3').setValue('Insert this week's task');
sheet1.getRange('D29').setValue('Insert this week's task');
sheet1.getRange('D55').setValue('Insert this week's task');
sheet1.getRange('D81').setValue('Insert this week's task');
sheet1.getRange('D107').setValue('Insert this week's task');
sheet1.getRange('C6').setValue('=C5');
sheet1.getRange('C25').setValue('=C5');
sheet1.getRange('C32').setValue('=C31');
sheet1.getRange('C51').setValue('=C31');
sheet1.getRange('C58').setValue('=C57');
sheet1.getRange('C77').setValue('=C57');
sheet1.getRange('C84').setValue('=C83');
sheet1.getRange('C103').setValue('=C83');
sheet1.getRange('C110').setValue('=C109');
sheet1.getRange('C129').setValue('=C109');
}
Jede Hilfe würde sehr geschätzt werden.
Dies auch zu den Kommentaren hinzufügen. Könntest du irgendjemanden in der Lage sein, die Geschwindigkeit der Ausführung zu kommentieren? Im Moment habe ich eine Spalte von Zellnamen (z. B. A2, D3: D5, E7, usw.) etwa 80 Zeilen. Ich führe sie durch die Schleife. Es dauert ungefähr 25-40 Sekunden, um zu laufen. Ich stolperte dann über sie durch die Array-Funktion, um es zu beschleunigen, aber das hat nichts mit der Geschwindigkeit getan. Kann ich nichts dafür tun, dass es durch das Blatt läuft und diese Zellen schneller löscht? – User125