在电子表格中获取矩形区域的A1注释

时间:2018-05-08 05:07:34

标签: algorithm google-apps-script google-sheets

我想在电子表格上获取矩形区域的A1注释。电子表格上的矩形样本位于图像下方。

enter image description here

我想获得有价值细胞的A1Notation" 1"。我不想得到B2,C2,D2,B3,C3,D3,B4,C4,D4和#34;。我想得到" B2:D4"。我试过的脚本是

var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var result = [];
for (var i = 0; i < data.length; i++){
  for (var j = 0; j < data[i].length; j++){
    if (data[i][j] == 1) {
      var range = sheet.getRange(i + 1, j + 1).getA1Notation();
      result.push(range);
    }
  }
}
Logger.log(result);

此脚本返回&#34; B2,C2,D2,B3,C3,D3,B4,C4,D4和#34;。 sheet.getDataRange().getA1Notation()是&#34; A1:D4&#34;。 &#34; 1&#34;的细胞位置并不总是一样的。我的问题是

  • 当&#34; 1&#34;的细胞位置时制作一个矩形区域,有没有办法将矩形区域检索为A1Notation?
    • 在样本中,我想得到&#34; B2:D4&#34;来自电子表格或来自&#34; B2,C2,D2,B3,C3,D3,B4,C4,D4和#34;。

我查看了Puzzle: Find largest rectangle (maximal rectangle problem)和链接。但我无法理解将其应用于我的脚本的方法。非常感谢你的时间。

修改

这些是样品。我得到了大小顺序的区域。

   A B C D E

1  0 0 0 0 0
2  0 1 1 1 0
3  0 1 1 1 0
4  0 1 1 1 0
5  0 0 0 0 0

我需要&#34; B2:D4&#34;。

   A B C D E

1  1 1 1 0 0
2  0 1 1 1 0
3  0 1 1 1 0
4  0 1 1 1 0
5  0 0 0 0 0

我需要&#34; B2:D4&#34;和&#34; A1:C1&#34;。

   A B C D E

1  0 1 1 1 1
2  0 1 1 1 1
3  0 0 0 1 1
4  0 0 0 0 1
5  0 0 0 0 1

我需要&#34; B1:E2&#34;,&#34; E3:E5&#34;,&#34; D3:D3&#34;。

1 个答案:

答案 0 :(得分:0)

您可以按如下方式修改您的功能:

var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var result = [];
for (var i = 0; i < data.length; i++){
  for (var j = 0; j < data[i].length; j++){
    if (data[i][j] == 1) {
      var range = sheet.getRange(i + 1, j + 1).getA1Notation();
      result.push(range);
    }
  }
}
Logger.log(result[0] + ":" + result[result.length-1]);

也许它没有经过优化,因为你在整个数据范围内进行迭代,但是在不知道你的数据结构的情况下很难说出优化的方式,需要详细说明。