【问题标题】:Hiding worksheets from specific users inside a spreadsheet在电子表格中隐藏特定用户的工作表
【发布时间】:2020-05-27 17:04:23
【问题描述】:

对不起,我不熟悉编码,我有一个包含多个工作表的电子表格,它与许多人共享,我试图在与新人共享时默认隐藏这些工作表,并将一些用户定义为管理员用户和每个位置的用户组,我可以运行代码,并且它在更短的时候工作,我知道可能有最简单的方法,但是你相信有一个特定的原因我没有得到任何运行代码,除非我删除 IF 语句,否则用户仍会看到隐藏的工作表。

提前非常感谢。

function onOpen() {
      var Adminusr= ['amw22test.com','taaa@test.com','od22@test.com'];
      var Germanyusr = ['brs@test.com', 'ya32@test.com'];
      var Austriausr = ['dr32@test.com', 'ok42@test.com'];
      var Greeceusr = ['karw@test.com'];
      var Polandusr = ['shi0@test.com, Ma@test.com'];
      var Spainusr = ['sad2@test.com, ko12@test.com, tes4@test.com, kkwi@test.com']; 


        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Germany').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Austria').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Greece').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Poland').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Spain').hideSheet()



      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Germanyusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Germany').showSheet()
      }

      if  (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Austriausr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Austria').showSheet()
        }

      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Greeceusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Greece').showSheet()
      }

      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Polandusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Poland').showSheet()
      }

      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Spainusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Spain').showSheet()
      }


    }

【问题讨论】:

    标签: javascript google-apps-script google-sheets triggers


    【解决方案1】:

    您的项目有两个主要问题

    1. 授权
    2. 算法

    授权

    您缺少onOpenClass Session 的限制。

    onOpen 是开放式简单触发器的保留名称。当被open事件触发时,则无法执行需要授权的方法。

    Session.getEffectiveUser().getEmail()Session.getActiveUser().getEmail() 在所有者打开电子表格时可能会工作,但在编辑器打开电子表格时会返回一个空字符串。相关问题:Session.getActiveUser().getEmail() returns no Value

    使用自定义菜单将活动用户电子邮件地址保存在用户属性存储中的一个技巧,然后onOpen 可以从那里获取用户电子邮件地址,而不是使用Class Session。相关问题:Determine current user in Apps Script

    算法

    onOpen 将在所有者或编辑者、任何编辑者打开电子表格时执行,无论其他用户是否处于活动状态,因此如果 brs@test.com 打开电子表格并稍后amw22test.com 执行相同操作,第一个用户将看到所有工作表。

    也许您应该为每个组创建一个电子表格并为管理员组创建一个主电子表格,而不是为所有用户使用一个电子表格。


    其他相关问题

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多