首页 > 解决方案 > 在表单上实时显示值 - 应用脚本

问题描述

我需要有关网络应用程序表单的帮助。我面临如何在 webapp 表单上实时显示价值的问题。我正确的 code.gs 但我无法创建用于运行函数间隔级别的 javascript。

请帮助我。

function getTime(){
    
  const ss =SpreadsheetApp.getActiveSpreadsheet()
      const wsData = ss.getSheetByName("Run")
      const emp = [Session.getActiveUser().getEmail()];
      const now = new Date();
      const d= wsData.getDataRange().getDisplayValues().reverse();
      const emp_i = d.findIndex(r => r[1] === emp.toString());
      if (emp_i == -1 && d[emp_i][4] == "");
      const hour = new Date(now - new Date(d[emp_i][3])).toISOString().substr(11,8 );
      return hour;
}

var Duration = [getTime()];
<label for="Duration">Last Activity Duration</label>
            <select class="w3-select"  id="Duration">
               
                <? for(let i=0;i<Duration.length;i++){ ?>
                <option>
                    <?= Duration[i]; ?>
                </option>
                <? }?>
            </select>
        </div>

标签: javascripthtmljqueryarraysgoogle-apps-script

解决方案


如果要实时检索日期,则必须在客户端处理所有内容并使用服务器端发出请求,类似于以下内容:

代码.gs

function doGet(e) {
   return HtmlService.createHtmlOutputFromFile('html');
}

html.html

<!DOCTYPE html>
<html>
   <head>
      <base target="_top">
   </head>
   <p id="time"></p>
   <body>
      <script>
         var timeDisplay = document.getElementById("time");
         function getTime() {
            var dateString = new Date().toLocaleString("ZONE", {timeZone: "YOUR_TIMEZONE"});
            var formattedString = dateString.replace(", ", " - ");
            timeDisplay.innerHTML = formattedString;
         }
         setInterval(getTime, 1000);
      </script>
   </body>
</html>

但是,如果您只想从 Apps 脚本代码中调用该函数,则应将客户端代码更新为:

<script>
   for (let i = 0; i < length; i++) {
      google.script.run.getTime();
   }
</script>

与 Apps 脚本函数的通信是通过使用google.script.run. 这是一个异步客户端 JavaScript API,它允许 HTML 服务页面调用服务器端函数。

参考


推荐阅读