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。