用于表格的Google Apps脚本,可以从A1表示法转换为字符串/列表表示法吗?

时间:2019-03-13 00:43:31

标签: google-apps-script google-sheets

我正在尝试编写一个脚本来保护所有工作表免受编辑,只有几个部分除外。我目前收到错误消息“无法将数组转换为Range []。”

我目前的印象是我需要以字符串表示法(我认为这就是它的名称)来编写它,例如['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转换为字符串表示法(有点相反)?

非常感谢

:)

1 个答案:

答案 0 :(得分:0)

所以要清楚一点:

如田边池所说:

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());
}

“保护范围”对话框确认该过程是否有效:

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);      
  }
}