簡體   English   中英

用腳本替換受保護范圍內的用戶(Google Sheet)

[英]Replace user in a protected range by script (Google Sheet)

這是我的具體情況:

  1. 我在谷歌表格中保護了一些范圍
  2. 如果是這些范圍的編輯器,我需要替換一些特定的編輯器(var Editor2Replace 和 Editor2Add 是電子郵件)
  3. 從邏輯上講,我試圖為每張紙:
  • 所有保護范圍的循環(FOR)(計數器 p)
  • 對於每個受保護的范圍,捕獲當前編輯器並將其放入數組中
  • 編輯閱讀 email ==> 這就是產生錯誤的原因
  • 循環(FOR)所有編輯,查看其中某人是否為 == Editor2Replace(即電子郵件)

這里是代碼,但在邏輯上有些錯誤,我懷疑什么是數組,什么不是..

   var Protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
    for (var p = 0; p < Protections.length; p++) {
      var Protection_Desc = Protections[p].getDescription();
      var Protection_Editors = [];
      var Protection_Editors = [Protections[p].getEditors()];
      for (var r = 0; r < Protection_Editors.length; r++){
         var Protection_Email[r] = [Protection_Editors[r].getEmail()];
         if (Protection_Idontknow == Editor2Replace){
          Protections[p].addEditor = Editor2Add;
          Protections[p].removeEditor = Editor2Replace;

          var Protection_Range = Protections[p].getRange();
          var Protection_Row = Protection_Range.getRow();
          var Owner1 = sheet.getRange(Protection_Row,5).getValue();
          var Owner2 = sheet.getRange(Protection_Row,6).getValue();
          if (Owner1 == Editor2Replace){
              sheet.getRange(Protection_Row,5).setValue(Editor2Add);
          }
          if (Owner2 == Editor2Replace){
              sheet.getRange(Protection_Row,6).setValue(Editor2Add);
          }
        }
      }

非常感謝您的幫助

您的腳本中有很多問題,我將一一列舉。 此外,我可以通過修改您的腳本來替換受保護工作表中的用戶。

問題:

  1. 重復聲明
var Protection_Editors = [];
var Protection_Editors = [Protections[p].getEditors()];
  1. 將返回的值(數組)存儲在另一個數組中(這不應該在您的問題中完成,它對您沒有任何幫助)
var Protection_Editors = [Protections[p].getEditors()];
...
var Protection_Email[r] = [Protection_Editors[r].getEmail()];
  1. 新聲明的具有索引的變量(我不明白為什么)
var Protection_Email[r] = [Protection_Editors[r].getEmail()];
  1. 未聲明的變量Protection_Idontknow
if (Protection_Idontknow == Editor2Replace){
  1. 方法addEditorremoveEditor的錯誤使用
Protections[p].addEditor = Editor2Add;
Protections[p].removeEditor = Editor2Replace;

下面的代碼應該解決這些問題(添加了一些評論):

代碼:

  var Protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  for (var p = 0; p < Protections.length; p++) {
    var Protection_Desc = Protections[p].getDescription();
    // returned value of getEditors is already an array, return as is
    var Protection_Editors = Protections[p].getEditors();
    for (var r = 0; r < Protection_Editors.length; r++) {
      var Protection_Email = Protection_Editors[r].getEmail();
      // compare current email with the one you want to replace
      if (Protection_Email == Editor2Replace) {
        // add new and remove the one to replace
        Protections[p].addEditor(Editor2Add);
        Protections[p].removeEditor(Editor2Replace);
      }
    }
  }

筆記:

  • 我已經刪除了與更換編輯無關的任何內容。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM