2016-05-10 22 views
0

ich auf einem Google Apps Script Projekt arbeite, und ich habe ein Problem mit meinem letzten Zeile Code auszuführen:Google Apps Script Tabellenkalkulations-Umbenennungs Fehler

sheets[0].setName(sheet.getRange(i,3).getValue()); 

Das Skript nimmt die Eingabe Google-Formulars, das auf die Tabelle Ziele "mysheet" und erstellt Formulare aus dieser Eingabe. Wenn Spalte I (9) keinen Text enthält, wird das Skript ausgelöst, erstellt ein neues Formular, füllt Spalte 9 aus und erstellt ein neues Ziel-Arbeitsblatt in der aktuellen Arbeitsmappe.

Das alles funktioniert gut. Das Problem, das ich habe, ist die letzte Stufe, die neu erstellte Tabelle umzubenennen, die erstellt wird. Das Skript stirbt entweder ohne Fehler oder ich erhalte einen nicht beschreibenden Servicecode-Fehler. Ich brauche im Grunde die neu erzeugte Tabelle, um in den Namen des Formulars umzubenennen. Ich habe ein anderes Blatt, das ein vlookup tun wird und der Name des neuen Blattes kann kein zufälliger sein "Form Antworten #"

Ich fand diesen Fehler in Google Code-System. https://code.google.com/p/google-apps-script-issues/issues/detail?id=5537

Dies, für mich jedenfalls, beschreibt, was passiert. Zu Beginn des Projekts verursachte der Fehler, dass das Blatt in Position 1 umbenannt wurde, da das System dachte, es sei 0. Ich bin mir nicht sicher, warum das nicht mehr passiert. Ich muss etwas geändert haben, aber der Skript-Editor geht nur ungefähr ein Dutzend Revisionen zurück, so dass ich es nicht verfolgen kann.

Ich dachte, wenn ich einen Namen Reset auf dem Blatt "mysheet" gezwungen:

sheet.setName("mySheet"); 

es funktionieren könnte. Und es tat es. Seitdem habe ich noch mehr Code hinzugefügt (unten ist die Skelettversion) und die Arbeit funktioniert nicht mehr. Ich habe meinen Code wieder zurückgeschnitten, um zu sehen, ob es etwas ist, das ich hinzugefügt habe, und es scheint immer noch nicht zu funktionieren. Ich habe auch versucht, ein anderes Blatt als das aktive Blatt zu setzen und das schien auch nicht zu funktionieren.

Hat jemand irgendwelche Vorschläge? Vielen Dank im Voraus für Ihre Gedanken.

function myFunction() { 
    var ss = SpreadsheetApp.openById('1gg8FTt_3_Ude5qEmpqlvjZdQocXbYzOKJrgGeLC3cMc'); 
    var sheet = ss.getSheetByName("mySheet"); 
    var range = sheet.getRange("A1:I7"); 
    for (var i = 1; i <= range.getNumRows(); i++) { 
     var cell = sheet.getRange(i,9).getValue(); 
     if(cell == ''){ 
     var form = FormApp.create(sheet.getRange(i,3).getValue()); 
     var linktoliveform = form.getPublishedUrl(); 
     var contentsforcell = '=HYPERLINK("' + linktoliveform + '","' + sheet.getRange(i,3).getValue() + '")'; 
     sheet.getRange(i,9).setValue(contentsforcell); 
     form.setCollectEmail(true); 
     form.setDescription(sheet.getRange(i,4).getValue()); 
     var item = form.addParagraphTextItem(); 
     item.setTitle(sheet.getRange(i,5).getValue()); 
     form.setDestination(FormApp.DestinationType.SPREADSHEET,'1gg8FTt_3_Ude5qEmpqlvjZdQocXbYzOKJrgGeLC3cMc'); 
     //sheet.setName("mySheet"); //reset name on mySheet sheet to force sheets/getsheets list to renumerate. https://code.google.com/p/google-apps-script-issues/issues/detail?id=5537 
     var sheets = ss.getSheets(); 
     sheets[0].setName(sheet.getRange(i,3).getValue());    
     } 
     } 
    } 
+0

Haben Sie überprüft, dass der Wert von i, 3 ​​zurückgegeben? Du benennst das gleiche Blatt sieben Mal, ich kann nicht sagen warum. – Jonathon

+0

Hallo Jonathon. Ja, i, 3 ​​gibt korrekt den Namen des Namens zurück, von dem das Formular aufgerufen werden soll (Differenzierung). Es erstellt die Form erfolgreich in meinem Laufwerk. Die Schleife läuft über das gesamte Sheet-Sheet (ich habe es auf 7 Zellen für diesen Post beschränkt: es war A1: ich ursprünglich) grundsätzlich zu scannen, welche Zeilen noch nicht verarbeitet wurden. Wenn also die ersten drei Zeilen in Spalte I bereits Formulare enthalten, erhalten sie keine neuen. – user3853379

+2

Probieren Sie 'SpreadsheetApp.flush()' vor dem Befehl 'setName' aus, um sicherzustellen, dass die Blattbildung tatsächlich stattfindet, bevor dieser Befehl ausgeführt wird. –

Antwort

0

Ich habe ein neues Ziel Blatt für die Ursprungsform und das Skript begann wieder richtig mit den

sheet.setName("mySheet"); 

wieder im Spiel zu arbeiten. Meine Vermutung ist, dass etwas beschädigt wurde oder das Blatt beim Testen aufgebläht wurde.

Verwandte Themen