【问题标题】:How can I get sheet range(s) from a list of individual cell row and column positions?如何从单个单元格行和列位置的列表中获取工作表范围?
【发布时间】:2018-02-26 04:16:58
【问题描述】:

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

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

例如:

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 列。

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

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    你会想做这样的事情。我必须运行,所以我无法测试它是否存在小错误,但它应该让您大致了解该怎么做!本质上,您一次移动通过 cellsToProtect 2 个元素并从这 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]);
    }
    

    【讨论】:

    • 太棒了,非常感谢它的魅力!小错误是 startRow 和 endRow 都需要 + 1 才能将它们变成工作表索引或数组索引。 for 循环声明应该是 i
    • 我已经解决了你提到的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多