[英]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.