首页 > 解决方案 > 不相交范围的 Google 脚本保护问题

问题描述

我有一个范围数组,我试图通过循环来保护它,但它不再起作用了。我不知道为什么。它昨天工作得很好,但保护措施没有发生在工作表上。我已尝试删除所有编辑器,但我们仍然可以进行编辑。基本上,我有一张命名范围;我根据这些范围创建了一个数组;然后从该数组中获取范围列表;然后我循环遍历范围列表以保护每个范围。

function protectTU(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("Named Ranges");
  var s2 = ss.getSheetByName("Copy of TRUCK UPDATES");
    var lr1 = s1.getRange("A3:A").getValues(); //Find last rowv
    var lr2 = lr1.filter(String).length; //Find last row
    var lr3 = parseInt(lr2) - 1;
    var data1 = s1.getRange("A3:E" + lr2).getValues();
    var dis = 2;
    var i = 1;
    var v1 = [];


    for (var j = i; j < lr3 - 1; j++)
    {


        if(data1[j][4] == dis)
        {
           v1.push(data1[j][1]);
        }

        if(dis == 1 && j == 43)
        {break;}
        if(dis == 2 && j == 81)
        {break;}
        if(dis == 3 && j == 135)
        {break;}


    }

    var ranges = s2.getRangeList(v1); 

    **for (i = 0; i < ranges.length; i++)
    {
        var protection = ranges[i].protect().setDescription('Please see the office for permission');
    }**


   }

标签: google-apps-scriptgoogle-sheets

解决方案


试试这个:

我想看看你的电子表格的图像和一些数据来确认,所以这几乎是一个猜测。

function protectTU(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("Named Ranges");
  var s2 = ss.getSheetByName("Copy of TRUCK UPDATES");
  var lr3 = s1.getRange(3,1,s1.getLastRow()-2,1).getValues();//better not to use A1Notation for setting up range here 
  var data1 = s1.getRange(3,1,s1.getLastRow()-2,5).getValues();//and here
  var dis = 2;
  var i = 1;
  var v1 = [];
  for (var j=0;j<data1.length;j++) {
    if(data1[j][4] == dis) {
      v1.push(data1[j][1]);//so hopefully column2 has A1Notation
    }
    if(dis==1 && j==43){break;}
    if(dis==2 && j==81){break;}
    if(dis==3 && j==135){break;}
  }
  var ranges = s2.getRangeList(v1).getRanges();
  //I don't use protection much so  I don't know about this
  for (i = 0; i < ranges.length; i++){
    var protection = ranges[i].protect().setDescription('Please see the office for permission');
  }
}

推荐阅读