Funktion wird im Google Script HTML-Dienst nicht ausgeführt
Ich codiere ein Tool für mich und meine Klassenkameraden, mit dem ein Google-Dokument erstellt und per E-Mail an den ausgewählten Lehrer gesendet wird. Dabei werden alle Felder ausgefüllt und alle Felder ausgefüllt, die nicht die Standardeinstellungen für das ausgewählte Fach enthalten, z. B. Sprachkunst. Die Funktion, die die ausgewählten Informationen zum Senden der E-Mail verwendet, wird jedoch nicht ausgeführt. Ich habe die Ausführungen für das Projekt überprüft und die Funktion customDoc()wurde nicht einmal ausgeführt. Ich vermute, dass es ein Problem mit meinem HTML ist, da ich keine Fehlermeldungen gesehen habe, als ich die Funktion im Editor getestet habe, um festzustellen, ob Syntaxfehler aufgetreten sind, aber es war makellos sauber, nur nie ausgeführt. Hier ist mein Code, und während der Fehler in der HTMl wahrscheinlich ist, werde ich auch meine JS bereitstellen.
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index.html');
}
function showDialoge() {
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutputFromFile('Index.html'), 'Test');
}
function customDoc(clicked_id) {
var d = new Date();
var s = (d.getDate()) + '/' + (d.getMonth() + 1) + '/' + d.getFullYear();
console.log(s);
var cycler = clicked_id
var math = ['[email protected]', 'math for ']
var LA = ['[email protected]', 'la for ']
var science = ['[email protected]', 'science for ']
var is = ['[email protected]', 'I&S for ']
var span = ['[email protected]', 'Espanol para ']
var presets = [math, LA, science, is, span]
var email1 = document.getElementById('Email')
var subject1 = document.getElementById('Sub')
var docName1 = document.getElementById('docName')
var message1 = document.getElementById('message')
var email = null
if (email1 != ' ') {
email = email1
} else {
email = presets[cycler];
[1];
}
var subject = null
if (subject1 != ' ') {
subject = subject1
} else {
subject = presets[cycler];
[2]; + s
}
var doc = null
if (docName1 != ' ') {
doc = docName1
} else {
doc = presets[cycler];
[2]; + s
}
var document = documentApp.create(doc)
var url = document.getUrl();
var message = null
if (message1 != ' ') {
message = message1 + '' + url
} else {
message = url
}
GmailApp.sendEmail(email, subject, message);
}
<!DOCTYPE html>
<script src="Code.gs"></script>
<html>
<h1>CREATE DOC</h1>
<body>
</body>
<p>Email</p>
<input type='text' id='Email' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<p style=" font-family: Times New Roman, Times, serif;">Doc name</p>
<input type='text' id='docName' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<p>Subject</p>
<input type='text' id='Sub' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<p>message</p>
<input type='text' id='message' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<h2>Fill blanks for subject: </h2>
<button id='2' onclick=c ustomDoc(this.id)> LA </button>
<button id='3' onclick=c ustomDoc(this.id)> Science </button>
<button id='4' onclick=c ustomDoc(this.id)> Individuals and societies </button>
<button id='5' onclick=c ustomDoc(this.id)> Spanish </button>
<button id='1' onclick=c ustomDoc(this.id)> math </button>
</html>
Antworten
Kurz gesagt, es customDoc()handelt sich um eine Serverfunktion, mit der Sie google.script.runApps Script anweisen müssen, eine bestimmte Serverfunktion auszuführen. onclick="customDoc(this.id)"Versuchen Sie es also, anstatt anzurufen onclick="google.script.run.customDoc(this.id)". Fügen Sie Code.gs nicht in Ihre HTML-Datei ein, da dies serverseitiger Code ist und nicht funktioniert. Ich empfehle dringend, das Client-zu-Server-Kommunikationshandbuch zu lesen .
Ihre customDoc()Funktion ist eine andere Geschichte :) Im Folgenden finden Sie eine sehr einfache Möglichkeit, Ihre verschiedenen Voreinstellungen (z. B. Subjekte) mithilfe von Objekten neu zu organisieren . Ich habe auch Ihren Datumsformatierungscode durch ersetzt Utilities.formatDate(), was möglicherweise etwas einfacher zu verstehen ist.
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index.html');
}
function customDoc(subject) {
var subjects = {
'math': {
email: '[email protected]',
preSubject: 'math for '
},
'la': {
email: '[email protected]',
preSubject: 'la for '
},
'science': {
email: '[email protected]',
preSubject: 'science for '
},
'is': {
email: '[email protected]',
preSubject: 'I&S for '
},
'spanish': {
email: '[email protected]',
preSubject: 'Español para '
}
};
var formattedDate = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'M/d/yyyy');
console.log('Today: ' + formattedDate);
console.log('Subject: ' + subject);
console.log(subjects[subject]);
}
<!DOCTYPE html>
<html>
<body>
<h1>CREATE DOC</h1>
<p>Email</p>
<input type="text" id="Email" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<p style="font-family: Times New Roman, Times, serif">Doc name</p>
<input type="text" id="docName" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<p>Subject</p>
<input type="text" id="Sub" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<p>message</p>
<input type="text" id="message" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
<h2>Fill blanks for subject:</h2>
<button id="la" onclick="google.script.run.customDoc(this.id)">LA</button>
<button id="science" onclick="google.script.run.customDoc(this.id)">Science</button>
<button id="is" onclick="google.script.run.customDoc(this.id)">Individuals and societies</button>
<button id="spanish" onclick="google.script.run.customDoc(this.id)">Spanish</button>
<button id="math" onclick="google.script.run.customDoc(this.id)">math</button>
</body>
</html>
Versuchen Sie, das oben genannte auszuführen und auf die Schaltfläche "Wissenschaft" zu klicken. Sie sollten ein Ausführungsprotokoll erhalten wie:
Today: 10/30/2020
Subject: science
{preSubject=science for , [email protected]}
Nachdem dies customDoc()tatsächlich ausgeführt wird, können Sie versuchen, die Google Doc-Generierung zu reparieren. Mir scheint, Sie erstellen ein völlig leeres Google Doc, was wahrscheinlich nicht das ist, was Sie wollen. Ich denke, Sie müssen noch etwas daran arbeiten und dann zurückkommen, wenn Sie spezifischere Fragen zum Generieren des Dokuments haben. Viel Glück!