Получить A1Notation прямоугольников в электронной таблице - PullRequest
0 голосов
/ 08 мая 2018

Я хочу получить A1Notation прямоугольников в электронной таблице. Образец прямоугольника на таблице ниже изображения.

enter image description here

Я хочу получить A1Notation ячеек со значением "1". Я не хочу получать "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: D4" из электронной таблицы или из "B2, C2, D2, B3, C3, D3, B4, C4, D4".

Я проверил Головоломка: Найти самый большой прямоугольник (проблема максимального прямоугольника) и ссылки. Но я не могу понять, как применить это к моему сценарию. Большое вам спасибо за ваше время.

Редактировать

Это образцы. Я получаю области в порядке размера.

   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".

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете изменить свою функцию следующим образом:

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

Возможно, она не оптимизирована, потому что вы выполняете итерации по всему диапазону данных, но трудно сказать, что оптимизируется, не зная вашей структуры данных,нужно в деталях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...