Google Sheets WebApp 返回值未定义
Google Sheets WebApp returning value as undefined
我可以通过我的网络应用程序将数据发送到 google 工作表,但是从 google 工作表中获取数据到我的网络应用程序却无法解决问题。也许我的代码有问题。也许有人可以帮我解决我的问题。
我的第一个目标是将某个单元格中的值加载到我的 html 页面上的文本框中。
我的第二个目标是让该文本框每 10 秒刷新一次,以查看是否有新数据并在必要时更新数据。有点像聊天框。
我的HTML代码:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<table>
<tr>
<td align="center" colspan="3">Message from recorder</td>
</tr>
<tr>
<th colspan="3"><input type="text" id="rmessage"></th>
<tr>
</table>
<?!= include("judge1-js"); ?>
</body>
</html>
接下来是判断-1.js:
<script>
document.getElementById("rmessage").addEventListener("mousedown",doRMessage);
function doRMessage(){
var rmessage = google.script.run.j1RMessage();
document.getElementById("rmessage").value = rmessage;
}
</script>
最后,这是我的 Google 脚本文件 funcs.gs:
var url = "https://docs.google.com/spreadsheets/d/1U0vO4AWFAXvsCW6zlF5nkekSKb2WJ80JarZUEO4ljK8/edit#gid=0";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Sheet1");
function j1RMessage() {
var rmessage = ws.getRange("B16").getValue();
return rmessage;
}
谁能看出为什么当我点击输入框时返回“undefined”?当我 运行 记录器中 google 的脚本编辑器中的脚本 ( Logger.log(rmessage); ) 它 returns 来更正单元格的值。
一旦我真正开始工作,有人可以帮我让它每 10 秒刷新一次吗?谢谢!
不幸的是,google.script.run.j1RMessage()
没有 return 来自 j1RMessage()
的值。我认为这就是你的问题的原因。为了从 j1RMessage()
中检索值,我想提出以下修改。
发件人:
function doRMessage(){
var rmessage = google.script.run.j1RMessage();
document.getElementById("rmessage").value = rmessage;
}
收件人:
function doRMessage(){
var rmessage = google.script.run.withSuccessHandler(rmessage => {
document.getElementById("rmessage").value = rmessage;
}).j1RMessage();
}
参考:
我找到了解决办法。事实证明,要从电子表格中获取数据并将其显示在 html 页面上,您需要先将数据传输到 html 是 Code.gs 页面。
Code.gs:
function doGet(e){
Route.path("judge1",loadJudge1);
if(Route[e.parameters.v]) {
return Route[e.parameters.v]();
} else {
return render("home");
}
}
function render(file,argsObject){
var tmp = HtmlService.createTemplateFromFile(file);
if(argsObject){
var keys = Object.keys(argsObject);
keys.forEach(function(key){
tmp[key] = argsObject[key];
});
}//END IF
return tmp.evaluate();
}
function loadJudge1(){
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Sheet1");
var rmessage = ws.getRange("B16").getValue();
return render("judge1",{rmessage: rmessage});
}
然后在我的 judge1.html:
<div id=auto><p type="text" id="rmessage"><?= rmessage ?></p></div>
现在解决我的自动刷新问题。我想我会为此创建另一个 post。
我可以通过我的网络应用程序将数据发送到 google 工作表,但是从 google 工作表中获取数据到我的网络应用程序却无法解决问题。也许我的代码有问题。也许有人可以帮我解决我的问题。
我的第一个目标是将某个单元格中的值加载到我的 html 页面上的文本框中。
我的第二个目标是让该文本框每 10 秒刷新一次,以查看是否有新数据并在必要时更新数据。有点像聊天框。
我的HTML代码:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<table>
<tr>
<td align="center" colspan="3">Message from recorder</td>
</tr>
<tr>
<th colspan="3"><input type="text" id="rmessage"></th>
<tr>
</table>
<?!= include("judge1-js"); ?>
</body>
</html>
接下来是判断-1.js:
<script>
document.getElementById("rmessage").addEventListener("mousedown",doRMessage);
function doRMessage(){
var rmessage = google.script.run.j1RMessage();
document.getElementById("rmessage").value = rmessage;
}
</script>
最后,这是我的 Google 脚本文件 funcs.gs:
var url = "https://docs.google.com/spreadsheets/d/1U0vO4AWFAXvsCW6zlF5nkekSKb2WJ80JarZUEO4ljK8/edit#gid=0";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Sheet1");
function j1RMessage() {
var rmessage = ws.getRange("B16").getValue();
return rmessage;
}
谁能看出为什么当我点击输入框时返回“undefined”?当我 运行 记录器中 google 的脚本编辑器中的脚本 ( Logger.log(rmessage); ) 它 returns 来更正单元格的值。
一旦我真正开始工作,有人可以帮我让它每 10 秒刷新一次吗?谢谢!
不幸的是,google.script.run.j1RMessage()
没有 return 来自 j1RMessage()
的值。我认为这就是你的问题的原因。为了从 j1RMessage()
中检索值,我想提出以下修改。
发件人:
function doRMessage(){
var rmessage = google.script.run.j1RMessage();
document.getElementById("rmessage").value = rmessage;
}
收件人:
function doRMessage(){
var rmessage = google.script.run.withSuccessHandler(rmessage => {
document.getElementById("rmessage").value = rmessage;
}).j1RMessage();
}
参考:
我找到了解决办法。事实证明,要从电子表格中获取数据并将其显示在 html 页面上,您需要先将数据传输到 html 是 Code.gs 页面。
Code.gs:
function doGet(e){
Route.path("judge1",loadJudge1);
if(Route[e.parameters.v]) {
return Route[e.parameters.v]();
} else {
return render("home");
}
}
function render(file,argsObject){
var tmp = HtmlService.createTemplateFromFile(file);
if(argsObject){
var keys = Object.keys(argsObject);
keys.forEach(function(key){
tmp[key] = argsObject[key];
});
}//END IF
return tmp.evaluate();
}
function loadJudge1(){
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Sheet1");
var rmessage = ws.getRange("B16").getValue();
return render("judge1",{rmessage: rmessage});
}
然后在我的 judge1.html:
<div id=auto><p type="text" id="rmessage"><?= rmessage ?></p></div>
现在解决我的自动刷新问题。我想我会为此创建另一个 post。