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

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

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

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

关于javascript - Google 电子表格脚本 - 仅授予对一张工作表的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231029/

相关文章:

c++ - 尝试使用 const int std::array 时出错

javascript - 从 google apps 脚本上的 json 发布到 facebook

javascript - 如何更改 Google 表格中的图表位置?

javascript - 根据字典替换字符串中的短语

javascript - 如何获取 JSON 文件中的特定数据

ios - 如何为结构的每个成员分配一个编号? ( swift )

c# - 将数据添加到通用字符串数组 C#

javascript - 如何从 JavaScript 中的 Function() 中删除匿名

javascript - 如何等待异步调用在 foreach 循环 JavaScript 中执行?

javascript - 如何从父窗口关闭模式对话框?