[英]How can I access Google Sheet spreadsheets only with Javascript?
[英]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.