Wie kann ich einer Google-Tabelle mehrere Eingaben von einer HTML-Benutzeroberfläche hinzufügen?

8

Ich habe eine Tabelle mit einer Schaltfläche, die auf eine Funktion in meinem Google Apps-Skript, openInputDialog , verweist. Mein gewünschtes Ergebnis ist, dass das Drücken der Taste eine HTML-Benutzeroberfläche öffnet, wo ein Benutzer Text in fünf Felder eingeben kann, und der Text wird von dieser Eingabe genommen und an eine neue Zeile am Ende der Tabelle angehängt. Ich habe ein Problem, bei dem beim Klicken auf die submit -Schaltfläche nichts passiert. Der Dialog wird nicht geschlossen und vor allem wird keine neue Zeile mit den Werten hinzugefügt, die darin eingegeben wurden.

Der Code lautet wie folgt:

addItem.gs:

%Vor%

Index.html:

%Vor%

Ich bin mir ziemlich sicher, dass die Antwort auf mein Problem auf einem einfachen Problem oder dem Missbrauch eines Teils dieses Skripts beruht, aber mein Programmierwissen ist derzeit nicht gut genug, um die Google Apps Script-Dokumentation, die ich war, zu verstehen Lesen.

    
ThatGuy7 17.12.2015, 02:51
quelle

1 Antwort

10

Ihr Skript ruft derzeit addItem ohne Parameter auf, sobald die Seite geladen wird:

%Vor%

Stattdessen müssen Sie diese Funktion aufrufen, wenn Sie auf die Schaltfläche Senden klicken. Während wir HTML-Formulare in Google Apps Script verwenden, können wir die normale Übermittlungsaktion nicht verwenden. Stattdessen richten wir eine Eingabeschaltfläche ein und verwenden einen Klick-Handler, um den Formularinhalt zu sammeln und ihn an die Serverfunktion zu übertragen.

Ihre Submit-Schaltfläche könnte etwa so aussehen:

%Vor%

Der Erfolgshandler wird aufgerufen, wenn eine Antwort return ed aus dem Runner lautet, addItem() . Um den Dialog zu schließen, verwenden Sie google.script.host.close . Sie könnten auch einen Fehlerbehandler haben; es würde aufgerufen werden, wenn der Läufer eine Ausnahme auswirft.

(Hinweis: Sie hatten itemAdd in Ihrem gs , aber addItem in Ihrem JavaScript - das hätte nie funktioniert.)

Ihre Funktion openInputDialog() ist ungerade; es enthält eine unnötige return , die den Dialog nicht mehr anzeigen würde, wahrscheinlich von einem Debugging Versuch übrig.

Wenn die Runner-Funktion itemAdd() aufgerufen wird, sollte der Inhalt des HTML-Formulars übergeben werden. Da die Schaltfläche zum Senden ein Teil dieses Formulars ist, werden die Felder des Formulars als Eigenschaften des übergeordneten Knotens im DOM angezeigt. Daher übergibt der Click-Handler this.parentNode als Parameter an den Runner.

Auf der Serverseite erhält itemAdd() das Objekt form , daher benötigen wir einen Parameter, um Operationen darauf zu erleichtern. Auf die genannten Formularfelder wird dann wie folgt verwiesen:

%Vor%

Wie auch immer, das funktioniert jetzt:

addItem.gs

%Vor%

Index.html

%Vor%     
Mogsdad 17.12.2015, 03:17
quelle