如何从单个单元格行和列位置列表中获取图纸范围?

时间:2018-02-25 17:24:36

标签: google-apps-script

我有一个appscript可以更新工作表中的一些数据。数据更新后,我想保护这些数据,以便用户无法对其进行修改。

目前我有一个函数返回一个对应于各个单元格的行和列位置的2D数组。我尝试迭代这个数组并逐个单元地应用保护需要太长时间,所以我试图创建一个函数来获取这个单元格位置数组并返回一个范围数组。

例如:

cellsToProtect = [[1,1] [2,1],[3,1],[4,1],[1,2],[2,2],[3,2],[4, 2],[5,6]]

这里有一个范围从第1行,第1行开始,到第2行第4列结束。 还有一个单元格,它不属于第5行第6行的较大范围。

我正在尝试研究如何制作一个给定此数组返回的makeRange函数:

[[1,1,2,4],[5,6,1,1]]

即: 范围从第1行第1行开始,并延伸2行和4列。 另一个范围从第5行第6行开始,并延伸1行和1列。

应该很容易,但我只是无法理解它。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你想做这样的事情。我必须跑,所以我无法测试它的小错误,但它应该给你一般的想法,做什么!从本质上讲,您一次通过cellsToProtect 2元素并从这两个元素中获取范围。

var ranges = [];
for(var i = 0; i<cellsToProtect.length; i+=2){ //Important i+=2 we want to move 2 each time.
  var startRow = parseInt(sheet.cellsToProtect[i][0])+1;
  var startCol = parseInt(sheet.cellsToProtect[i+1][0]);
  var endRow = parseInt(sheet.cellsToProtect[i][1])+1;
  var endCol = parseInt(sheet.cellsToProtect[i+1][1]);
  var numRows = endRow - startRow;
  var numCols = endCol - startCol;

  ranges.push(startRow, startCol, numRows, numCols]);
}