2016-05-05 6 views
3

Ich arbeite an dem Versuch, einige Fehlermeldungen zu machen, falls jemand keinen Wert eingibt. In dem Fall überprüfe ich, ob der Wert leer ist, und überprüfe schließlich, ob es ein Datum ist.Variable von Google-Skript an HTML-Dialog übergeben

Also wenn hier ist der heruntergekommen.

1) Führen der if-Anweisung, wenn der Wert wahr ist, mit dem String-Argumente

if (sheetData[4] === ""){ 
    errorPrompt("Title"); 
} 

2) Ausführen die folgende Funktion der Fehleraufforderung mit dem String-Argumente ausgeführt. Ich möchte dann, dass die Funktion das Argument an den HTML-Iframe weitergibt.

function to open dialog 
function errorPrompt(missvar) { 
    var missVar = "test"; 
    var html = HtmlService.createHtmlOutputFromFile('missingvar') 
     .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp. 
     .showModalDialog(html, missVar + ' is Missing please provide ' + missVar + " and try again."); 
} 

3) Die Variable sollte dann an die HTML-Datei übergeben werden, die als modaler Dialog angezeigt wird. Wenn die Zeichenfolge gleich "Titel" ist, sollte der Dialog wie folgt lauten: "Der Titel fehlt. Geben Sie Titel ein und versuchen Sie es erneut."

missingvar.html

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body>    
     <script> 
     UI.getElementById("missVar").innerHTML; 
     </script> 

     The <var id=missVar></var> is missing. Please enter <var id=missVar></var> and try again. 
    <input type="button" value="Close" 
     onclick="google.script.host.close()" /> 

    </body> 
</html> 

Die HTML oben zeigt jedoch die missVar nicht zeigen. Hat jemand irgendwelche Gedanken? Nur zu beachten, die Titelleiste des Dialogfelds zeigt die Variable korrekt an, aber das ist außerhalb des HTML.

Antwort

0

Ich habe die Art geändert, wie die Eingabeaufforderung erstellt wird. Die HTML-Datei wird nicht mehr benötigt, da die js-Datei sie im laufenden Betrieb erstellt.

Von

function errorPrompt(missvar) { 
    var missVar = "test"; 
    var html = HtmlService.createHtmlOutputFromFile('missingvar') 
     .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp. 
     .showModalDialog(html, missVar + ' is Missing please provide ' + missVar + " and try again."); 
} 

Um

function errorPrompt(missvar) { 
    var missVar = "test"; 
    var htmlOutput = HtmlService 
    .createHtmlOutput('<p>' + missVar + ' is missing, please enter a ' + missVar + ' and try again.</p>') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .setWidth(250) 
    .setHeight(300); 
SpreadsheetApp.getUi().showModalDialog(htmlOutput, missVar + ' is missing. Please provide a ' + missVar + ' and try again.'); 
} 
+1

Dies ist effektiv das gleiche wie die Templating-Lösung, die ich in meiner Antwort beschrieben. Schauen Sie es sich an, da es Ihnen in Zukunft eine größere Flexibilität/Erweiterbarkeit ermöglicht. – Jonathon

1

HTML Service: Templated HTML

Verwenden HtmlService Templating wenn Sie wollen das tun, was Sie beschreiben. Es entfernt das JS auf der Clientseite und dient dem vollständig formatierten Dialog mit missVar intakt.

var html = HtmlService.createTemplateFromFile(missingVar); 

    html.missingVar = missVar; 

var htmlOutput = html.evaluate(); 

Ihre missingvar.html Datei enthält dann

<?= missingVar ?> 

Überall dort, wo Sie diese Variable angezeigt werden soll.

+1

Diese Funktion funktioniert nur, wenn die übergebene Variable kein Objekt ist (dh eine einfache Zeichenfolge oder Nummer). Eine umfassendere Lösung finden Sie unter http://StackOverflow.com/a/38314034/2213940 –

Verwandte Themen