【问题标题】:Code Trigger does not work in App Google Sheets [duplicate]代码触发器在 App Google Sheets 中不起作用 [重复]
【发布时间】:2019-10-02 08:43:22
【问题描述】:

我有一个代码可以让人们在打开工作表时跳转到当前日期行。

我通过以下方式解决了桌面上的问题:Previous solution

现在,这在 iOS 和 Android 应用 Google 表格上也应该以相同的方式工作。但是,如果我在应用程序中打开工作表,什么也不会发生。如果在应用程序中打开工作表,有人知道如何触发跳转到当前日期行吗?

非常感谢!

【问题讨论】:

标签: google-apps-script google-sheets web-applications triggers google-sheets-formula


【解决方案1】:

简单和可安装的触发器都受restrictions 约束,并且不能被查看者触发。因此,我建议您采用以下解决方法:

在每个open 事件中,隐藏除感兴趣的行之外的所有行。

如果创建WebApp,即使打开链接的用户没有编辑权限,也可以使用它来运行行隐藏功能。

示例:

  • Web 应用程序的 Code.gs 部分
function doGet() {
    return HtmlService.createHtmlOutputFromFile("index.html")
        .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var lastRow=sheet.getLastRow();
 sheet.showRows(1, lastRow);
 var range = sheet.getRange("B:B");
 var values = range.getValues();  
 var day = 24*3600*1000;  
 var today = parseInt((new Date().setHours(0,0,0,0))/day);  
 var ssdate; 
 for (var i=0; i<values.length; i++) {
   try {
     ssdate = values[i][0].getTime()/day;
   }
   catch(e) {
   }
   if (ssdate && Math.floor(ssdate) == today) {
               Logger.log(i);
     sheet.hideRows(i+2,lastRow-i-1);
     sheet.hideRows(1,i);
     break;
   }    
 }
}
  • Web 应用程序的 index.html 部分
<!DOCTYPE html>
<html>

<head>
    <base target="_top">
    <script>
        function redirect() {
            window.open("PASTEHERETHEURLOFTHESPREADSHEET","_blank");
            google.script.run.onOpen();
        }
    </script>
</head>
<body onload="redirect()">
</body>
</html>
  • 将 WebApp 部署为 me 并根据需要授予访问权限:

  • 向用户提供 WebApp 的 URL,而不是电子表格的 URL。

注意:不能在 WebApp 中setActiveRange,因为 这是一种用户特定的视图模式,而不是您的一般编辑 作为编辑者可以强制查看者。

【讨论】:

  • 嘿,非常感谢您的帮助!但是,我认为我对问题的解释是错误的。我对桌面上的一切工作方式感到满意。我分享了一个允许该人编辑的链接,但仅限于当天:您提供了代码stackoverflow.com/questions/58060110/…。此外,如果您打开电子表格,您应该跳转。两者都不是这样。有没有什么方法可以在 Google Sheets App 中相对容易地实现这一点?很抱歉,上面介绍的类似解决方案有点超出我的技能水平。
  • Onedit 触发器在 Adroid 设备上工作,但正如您自己意识到的那样 - 它们不允许获取查看器的活动范围(我相信这就是您想要的。这就是为什么我为您提供解决方法的原因:隐藏活动行之前的所有行,以便当人们打开工作表时,活动行将自动成为最上面的行并选择一个。然而,解决方案意味着使用 Web 应用程序,这意味着在浏览器中而不是在应用程序中打开电子表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多