Code ausführen zu schnell für apps-Skript...?
Ich schrieb einige code auszuführen, wenn die Tabelle geöffnet wird. Vor allem, überprüfen, um zu sehen, ob es Blätter außer dem Blatt mit dem Namen "Main" und, wenn es ist, löschen Sie alle, aber die "Main" ein. (Die "Haupt" - Platte wird die erste Platte zu allen Zeiten.) Deaktivieren Sie alles, was in der "Main" - Blatt und ersetzen Sie jedes mal mit den Dingen, die man Lesen kann in dem code am Ende.
//This creates a menu when this spreadsheet is opened.
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
var numSheets = ss.getSheets();
while (numSheets.length > 1){
ss.setActiveSheet(numSheets[1]);
ss.deleteActiveSheet();
var numSheets = ss.getSheets();
}
ss.setActiveSheet(numSheets[0]);
ss.getActiveSheet().getDataRange().clear();
menuEntries.push({name: "Create Folder Structure", functionName: "folderStruc"});
ss.addMenu("Click here when done.", menuEntries);
ss.getRange('A1:B1').mergeAcross().setValue('TA');
ss.getRange('A2').setValue('First Name');
ss.getRange('B2').setValue('Last Name');
ss.getRange('C2').setValue('Email');
ss.getRange('D2').setValue('Classes');
}
Das script funktioniert perfekt, wenn ich die debug-Zeile für Zeile. Es funktioniert auch gut, wenn es nur die "Haupt" sheet gibt. Aber wenn es mehrere Blätter, und ich öffne die Tabellenkalkulation, wäre es durch die while-Schleife und löschen Sie alle Blätter bis auf das "Wichtigste", aber es würde hängen auf der "Main" ein und nur die Anzeige "Loading..." und zeigen keine Zellen oder so etwas. Das benutzerdefinierte Menü erscheint. Auch zeigt es "Arbeitet" in einem gelben Feld am oberen Rand.
Die Lösung Serge beantwortet gelöst. Aber du hast Recht, es ist ein Netzwerk problem.
InformationsquelleAutor PhysLabTsar | 2013-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein code funktioniert, wenn Sie fügen Sie einfach eine kleine Verzögerung zwischen jedem Blatt entfernen, es ist ein bekanntes Problem beim löschen mehrere Blätter.
Hier ist der code:
Hinweis: Sie erwähnen in Ihrer Frage, dass Sie nicht löschen Sie das Blatt "Haupt", aber ich sehe keine Bedingung im Skript, so dass ich denke, Sie verlassen sich auf die Blätter um. Es wäre ganz einfach um eine Bedingung hinzuzufügen, dass die Kontrollen der sheetName, bevor Sie Sie löschen, so dass Sie nicht Gefahr zu löschen, die großschot durch Zufall, wenn aus irgendeinem Grund die Blatt-Reihenfolge wurde geändert. So etwas wie dieses, die das original ersetzen
while loop
wird das Blatt an seinem Platz, wenn nötig.Eigentlich ist es für mich gearbeitet, wenn ich die 1 Sekunde Verzögerung zwischen setActiveSheet() und deleteActivesheet() etwa so: while (numSheets.Länge > 1){ ss.setActiveSheet(numSheets[1]); Utilities.sleep(1000); ss.deleteActiveSheet(); var numSheets = ss.getSheets(); } Es gehängt ein bisschen mit ihm unter, so dass ich versuchte, verschieben Sie es einen Schritt vor und es funktionierte einwandfrei. Nochmals vielen Dank!
InformationsquelleAutor Serge insas