锁定单元格,只有具有特定电子邮件地址的用户才能在Google电子表格中更新这些单元格

时间:2016-04-25 16:25:34

标签: google-sheets

我正在尝试根据电子表格中的电子邮件地址列设置更新单元格的权限。例如,我有一个单元格“B2”需要被锁定,并且只应解锁以便用户通过电子邮件地址“123@abc.com”访问工作表进行修改,该地址作为行值存在片。电子邮件地址与用户用于查看工作表的电子邮件地址相同。图片如下所示。欢迎任何帮助或建议。谢谢!

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用protection class实现此目的。

以下是一些可以为您完成此操作的代码:

这将在email列下方,并在电子邮件地址右侧的单元格中添加受保护的范围。

function ProtectRanges(){
  var ss = SpreadsheetApp.getActiveSheet()
  var range = ss.getDataRange();
  var values = range.getValues();
  var columns = GetColumns(values, range.getNumColumns(), 0); //Get the column headers

  for(var  i = 1; i < values.length; i++){
    var email = values[i][columns.columns['email'].index]; //Get the email address from the 'email' columns
    if(email !== ''){
      var rangeToProtect = ss.getRange(i+1, columns.columns['owner'].index + 1, 1, 1); //Get the range to protect, one cell over
      rangeToProtect.protect().addEditor(email).setDescription("Only " + email + " has edit rights"); //Protect the range and add a description      
    }
  }
}

//Gets a columns object for the sheet for easy indexing
function GetColumns(valuesRange, columnCount, rowIndex)
{
  var columns = {
    columns: {},
    length: 0
  }

  Logger.log("Populating columns...");
  for(var i = 0; i < columnCount; i++)
  {
    if(valuesRange[0][i] !== ''){
      columns.columns[valuesRange[0][i]] = {index: i ,value: valuesRange[0][i]};
      columns.length++;      
    }
  }  
  return columns;
}