【问题标题】:Real time update html contents when certain spreadsheet is modified修改某些电子表格时实时更新html内容
【发布时间】:2016-10-08 10:31:48
【问题描述】:

当电子表格更改时,有什么方法可以更新 div 内容? 我正在寻找的就像一个聊天和 webSockets,所以不需要更新和任何超时。

HTML 文件:

<div id="thediv"></div>
google.script.run.withSuccessHandler(showChange).setChangefromSpreadsheet();
function showChange(e){
$('#thediv').html(e); //of course jQuery called
}

.sg 文件

function setChangefromSpreadsheet()
var sheet = SpreadsheetApp.openById('SpreadsheetId')
var data = sheet.getDataRange().getValues();
return data[0][0];
}

这将与超时类似 (在 html 文件上): 编辑设置间隔:

setInterval(function(){google.script.run
        .withSuccessHandler(showChange).setChangefromSpreadsheet()}, 1000); //for example

有没有什么方法可以在没有超时的情况下做到这一点?

感谢您的帮助

【问题讨论】:

  • 原因是调用和良好实践的可能限制(我认为)。我确定我不会受到限制,但是......应用程序的性能(例如在手机上)可能会因这种调用(超时)而丢失
  • 您可以设置一个字段作为标志。它可以设置为新的或旧的。然后,您可以在您的 div 中以 {{ $flag }} 的形式访问它。你可以有一个带有 .{{ $flag }} 的 css。这将帮助您获得新旧 div。这可以与通过触发器更新电子表格一起使用。这是一个简短的描述。希望对你有帮助。

标签: google-apps-script google-sheets


【解决方案1】:

很遗憾,您所寻找的东西是不可能的。您正在寻找某种“触发器”,只要发生电子表格编辑,就会从 Google Apps 向您的网页发送一条消息。

从技术上讲,解决此问题的唯一方法是您试图避免的:让您的网页每 x 秒检查一次。顺便说一句,如果您希望它每 x 秒运行一次,而不是只运行一次,您可能希望使用 setInterval(),而不是 setTimeout()

我明白为什么这看起来很难看。但是如果你处理得足够好,在这种情况下setInterval() 确实没有任何问题。如果它的运行频率低于每秒​​一次,那么您绝对不会遇到 Google 的限制(我认为您可以一次运行 6 个回调给 Google,这对于您正在做的事情来说已经足够了)。

或者,根据您的应用程序,您还可以有一个“刷新”按钮供用户单击。不确定这是否适用于您的情况,但从技术上讲,它也是一种选择。

【讨论】:

  • 您好,感谢您的回答。你很好地理解了这个问题。我几乎同意除了谷歌限制之外的所有内容,因为例如在聊天的情况下,每个登录的用户都会递归调用。如果我一次有 200 个用户使用该应用程序?我认为这可能是对 Google Apps 脚本团队的建议,他们默认实现一个脚本,该脚本与服务器端建立一个 websocket,或者一个 API。我认为这对他们来说不是很困难(他们只是在 Drive 中拥有它)并且可能性和性能会非常非常好。 (编辑到 setInterval)
  • 太棒了,我很高兴 setInterval 现在为你工作!
猜你喜欢
  • 1970-01-01
  • 2014-12-19
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多