【问题标题】:Google spreadsheets script - grant access to only one sheetGoogle 电子表格脚本 - 仅授予对一张工作表的访问权限
【发布时间】:2015-03-29 15:24:16
【问题描述】:

如何仅授予当前电子表格用户对特定工作表的访问权限?我的想法是让工作表以用户电子邮件命名,并且只授予对与用户电子邮件同名的工作表的访问权限。

function protectSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var email = Session.getActiveUser().getEmail();
  var num_sheets = ss.getNumSheets();

  for (var i = 0; i < num_sheets; i++){
    //setting permission to each sheet
    SpreadsheetApp.setActiveSheet(ss.getSheets()[i]);
    var sheet = SpreadsheetApp.getActiveSheet();
    var permissions = sheet.getSheetProtection();
    permissions.setProtected(true);
    sheet.setSheetProtection(permissions);

    // hiding all sheets wich not allowed
    if (ss.getSheets()[i] != email) {
     sheet.hideSheet();
    }
  };
}

但问题是电子邮件在一个数组中。如何使用数组来匹配当前用户?有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: javascript arrays google-apps-script permissions google-sheets


    【解决方案1】:

    这行代码:

    if (ss.getSheets()[i] != email) {
    

    正在检索包含所有工作表的数组。 (并且每次运行该行代码时它都会检索该数据。在代码的其他地方只读取一次该数据可能会更好)。您还可以使用[i] 的索引,它只从数组中取出一张工作表。但那是一个对象。它不返回名称。你想要这个名字。您需要使用getSheetName() 方法。

    if (ss.getSheets()[i].getSheetName() != email) {
    

    我重写了您的代码,以便在代码中位于 FOR 循环之外的更高位置的工作表数组。

    function protectSheets() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var email = Session.getActiveUser().getEmail();
      var num_sheets = ss.getNumSheets();
    
      var arryAllSheetNames = ss.getSheets();
      var thisSheetName = "";
    
      for (var i = 0; i < num_sheets; i++){
        //set permissions to each sheet
        SpreadsheetApp.setActiveSheet(ss.getSheets()[i]);
        var sheet = SpreadsheetApp.getActiveSheet();
        var permissions = sheet.getSheetProtection();
        permissions.setProtected(true);
        sheet.setSheetProtection(permissions);
    
        thisSheetName = arryAllSheetNames[i].getSheetName();
    
        // hide all sheets which are not allowed
        if (thisSheetName != email) {
          sheet.hideSheet();
        }
      };
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-07
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多