函数未在 Google 脚本 HTML 服务中执行
我正在为自己和同学编写一个工具,它将创建一个 Google 文档并将其通过电子邮件发送给选定的老师,使用所有已填写的字段并填充所有未使用所选科目(例如语言艺术)的默认值的字段,但获取所选信息并使用它发送电子邮件的函数未执行。我检查了项目的执行情况,函数
customDoc()
一次都没有执行过。我怀疑这是我的 HTML 的问题,因为当我在编辑器中测试该函数以查看是否存在语法错误时,我没有看到任何错误消息,但它很干净,只是从未执行过。这是我的代码,虽然错误可能出现在 HTMl 中,但我也会提供我的 JS。
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>
简而言之,
customDoc()
是一个服务器函数,您需要使用
google.script.run
来告诉 Apps Script 运行特定的服务器函数。因此,不要调用
onclick="customDoc(this.id)"
,而是尝试
onclick="google.script.run.customDoc(this.id)"
。不要在您的 HTML 文件中包括 Code.gs,因为那是服务器端代码,无法正常工作。我强烈建议您阅读
客户端到服务器通信指南
。
您的
customDoc()
函数是另一回事 :) 下面是使用
对象
重新组织不同预设(例如主题)的一种非常简单的方法。我还用
Utilities.formatDate()
替换了您的日期格式代码,这可能更容易理解。
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>
尝试运行上述代码并单击科学按钮。您应该会得到如下执行日志:
Today: 10/30/2020
Subject: science
{preSubject=science for , [email protected]}
现在
customDoc()
正在实际执行,您可以开始尝试修复 Google Doc 生成。在我看来,您正在创建一个完全空白的 Google Doc,这可能不是您想要的。我认为您需要再进行一些工作,然后如果您对生成文档有更具体的问题,请再回来。祝你好运!