从A1表示法转换为字符串/列表表示法?

问题描述 投票:0回答:1

我正在尝试编写一个脚本来保护所有工作表不被编辑,除了几个部分。我目前收到错误“无法将数组转换为范围[]。”

我目前的印象是我需要用字符串表示法(我认为这就是所谓的)来编写它,例如格式为('C4:D7']的(4,3,3,2)(firstRow,firstColumn) ,行数,列数)正如我目前所理解的那样。

这是目前的脚本:

function Protect() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var protection = spreadsheet.protect();
  protection.setUnprotectedRanges(['C4:D7', 'C11:D13', 'C18:E20', 'F18:G18', 'C23:G25', 'C30:D32'])
};

所以我的主要问题是我的第4行应该是什么,因为我尝试过的任何东西都没有用(如果你使用一个例子,我可以请求你使用一个实际的例子,因为我发现当人们使用占位符时我真的很难做到该做什么在他们的答案)

还有一个子问题是:有没有办法将A1转换为字符串表示法(反过来)?

google-apps-script google-sheets
1个回答
0
投票

所以要明确一点:

正如Tanaike所说:

function Protect() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var protection = spreadsheet.protect();
  protection.setUnprotectedRanges(spreadsheet.getRangeList(['C4:D7', 'C11:D13', 'C18:E20', 'F18:G18', 'C23:G25', 'C30:D32']).getRanges());
}

并且Protect Ranges对话确认过程有效:

enter image description here

子问题的可能答案:

function convertA1ToList(A1string) {
  var A1string=A1string || 'A1:Z100';//for debugging return for this is 1,1,100,26
  if(A1string) {
    var ss=SpreadsheetApp.getActive();
    var sh=ss.getActiveSheet();
    var rg=sh.getRange(A1string);
    var rowStart=rg.getRow();
    var columnStart=rg.getColumn();
    var numrows=rg.getHeight();
    var numcols=rg.getWidth();
    return Utilities.formatString('%s,%s,%s,%s',rowStart,columnStart,numrows,numcols);      
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.