簡體   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