【问题标题】:Show the Value on form real time - app script在表单上实时显示值 - 应用脚本
【发布时间】:2021-11-18 22:50:00
【问题描述】:

我需要有关网络应用程序表单的帮助。我面临如何在 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>

【问题讨论】:

  • 我不确定我是否完全理解您的最终目标 - 所以您想在 Web 应用程序的客户端运行 getTime 函数吗?它应该在应用程序上实时吗?
  • 是的,你是对的..你能帮我吗

标签: javascript html jquery arrays google-apps-script


【解决方案1】:

我看不出你的 getTime() 将如何返回一个数组:

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());//emp.toString() doesn't look right
  if (emp_i == -1 && d[emp_i][4] == "");//I don't think this line is doing anything
  const hour = new Date(now - new Date(d[emp_i][3])).toISOString().substr(11, 8);
  return hour;
}

但我认为你需要这样的 doGet() :

function doGet(e) {
  const ui = SpreadsheetApp.getUi();
  let t = HtmlService.createTemplateFromFile('filename');//create a template
  t.Duration = getTime(); // assign global variables to the template this way
  return t.evaluate();//this is htmloutput
}

实际上很难从代码中说出您想要什么。最好只用文字解释你想做什么。

【讨论】:

  • 嗨,谢谢.....在这段代码中,我取的是小时值..例如。在 gsheet 中已经有时间戳作为开始时间,我正在计算当前时间 - 开始时间 = 小时.. 我希望你明白我的意思
  • emp 我正在检查当前用户是否有任何活动未完成,然后显示与停留在一项活动上的时间相匹配的时间。我想向你解释一下......只是我需要如果我在 code.gs 中有正确的东西我如何设置间隔函数并在 html 上显示输出
  • 我不明白最后的评论。也许你可以用完整的句子重写它。
  • 嗨,上面的代码gettime函数是正确的,我需要帮助我如何设置间隔函数,然后在html上显示值。
  • 嗯,这是我们不同意的事情,但这里有一个 reference for setInterval 但你也可以使用模板化的 html 或 window.onload
【解决方案2】:

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

代码.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>

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

参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2017-05-06
    • 2021-11-28
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多