繁体   English   中英

Google电子表格脚本-仅授予对一张工作表的访问权限

[英]Google spreadsheets script - grant access to only one sheet

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

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();
    }
  };
}

但是问题在于电子邮件是一个数组。 如何使用数组与当前用户进行匹配? 还有另一种解决方法吗?

这行代码:

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();
    }
  };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM