【发布时间】:2018-10-17 23:13:07
【问题描述】:
我想获得电子表格上矩形区域的 A1Notation。电子表格上的矩形示例如下图。
我想获得值为“1”的单元格的 A1Notation。我不想得到“B2、C2、D2、B3、C3、D3、B4、C4、D4”。我想得到“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);
此脚本返回“B2、C2、D2、B3、C3、D3、B4、C4、D4”。 sheet.getDataRange().getA1Notation() 是“A1:D4”。 “1”的单元格的位置并不总是相同的。我的问题是
- 当“1”的单元格的位置形成一个矩形区域时,有没有办法将矩形区域检索为A1Notation?
- 在示例中,我想从电子表格或“B2、C2、D2、B3、C3、D3、B4、C4、D4”中获取“B2:D4”。
我检查了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
我需要“B2:D4”。
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
我需要“B2:D4”和“A1:C1”。
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
我需要“B1:E2”、“E3:E5”、“D3:D3”。
【问题讨论】:
-
没有简单的方法。如果您可以确定表格的边缘没有间隙,您可以使用
Range#getNextDataCell()帮助找到边界边缘,但您仍然需要实现自己的逻辑来存储相关的单元格索引并从中构造 A1 字符串. -
@tehhowch 是的。我想是这样。但我仍然找不到更新脚本的算法。
-
请将comment上的说明添加到this answer并相应地编辑标题。
-
@I'-'我很抱歉让您感到困惑。我更新了我的答案。如果您看不清楚,请告诉我。
-
@Rubén 很抱歉让您感到困惑。我更新了我的答案。如果您看不清楚,请告诉我。
标签: algorithm google-apps-script google-sheets