Google apps script 确定同一谷歌电子表格上的活动用户

Google apps script 确定同一谷歌电子表格上的活动用户,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个共享的电子表格,其中包含许多工作表,带有一个OnOpen脚本,隐藏了除仪表板工作表以外的所有打开的工作表。有一个自定义菜单,用户可以从中显示和处理工作表 问题是,当User1处理Sheet1时,User2打开电子表格,OnOpen脚本隐藏User1和User2的Sheet1 是否有办法确定另一个用户当前是否正在处理电子表格?(控制OnOpen图纸隐藏操作) 实现这一点的另一种方法是?我认为最接近于确定是否有活动用户的方法是使用捕获编辑的简单触发器在工作表上不断缓存活动: var EDIT

我有一个共享的电子表格,其中包含许多工作表,带有一个OnOpen脚本,隐藏了除仪表板工作表以外的所有打开的工作表。有一个自定义菜单,用户可以从中显示和处理工作表

问题是,当User1处理Sheet1时,User2打开电子表格,OnOpen脚本隐藏User1和User2的Sheet1

是否有办法确定另一个用户当前是否正在处理电子表格?(控制OnOpen图纸隐藏操作)


实现这一点的另一种方法是?

我认为最接近于确定是否有活动用户的方法是使用捕获编辑的简单触发器在工作表上不断缓存活动:

var EDIT_CACHESTRING = "last write";
// Bind the simple edit trigger (no authorizations needed)
function onEdit(eventObject) {
  CacheService.getDocumentCache()
      .put(EDIT_CACHESTRING, (new Date().getTime()).toString());
}

function onOpen(eventObject) {
  // or function myNonSimpleTriggerOnOpen(e), if you do stuff that needs authorization.
  const cache = CacheService.getDocumentCache();

  // If nothing was cached, there have been no recent edits.
  // (default cache duration is 10 minutes).
  var lastWrite = cache.get(EDIT_CACHESTRING);
  var showOnlyDashboard = !lastWrite;

  // If something was cached, then determine how long it has been since the edit.
  if (lastWrite) {
    const now = new Date().getTime();
    lastWrite = parseInt(lastWrite, 10);
    showOnlyDashboard = (now - lastWrite) > someNumberOfSeconds * 1000;
  }
  if (showOnlyDashboard) {
    methodThatHidesSheets();
  }
  /**
   * other stuff you do in your on open function
   */
}
您可以获得fancier,并在编辑时缓存包含已编辑图纸名称/id(可从编辑触发器的事件对象获得)的对象,以便即使正在进行其他编辑,也可以隐藏非活动图纸

另一种方法(也更复杂)是对当前文档使用。您可以在选择的时间范围内检查某种类型的活动,并拒绝调用
methodthathhidesheets()
,因为在该时间范围内没有该活动

这两种方法都无法确定是否存在工作表的非活动查看器。正如您已经注意到的那样,无法按每个用户控制同一文档中图纸的可见性-文档的任何当前查看器都会看到与所有其他当前查看器相同的图纸

要求阅读:


在您的情况下,如何使用锁服务?用户仍然可以使用“视图”菜单取消隐藏图纸-这不会触发锁定服务-我认为必须通过自定义菜单用户单击来触发锁定服务。不幸的是,我不能相信用户的行为……我真的很抱歉我帮不上忙。相关问题:我说相关,因为你对“活动”的定义是那些编辑工作表的人,而不仅仅是查看。