Разбить строки по цвету ячейки и деконструировать строку через запятую - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно разделить две строки на основе значения ячейки Цвет.Каждое значение, разделенное запятыми, должно генерировать новую строку.

Ссылка Google Sheet: https://docs.google.com/spreadsheets/d/1rwtSxDn_gf60xy0w63mp8Dj4bMUH9tNKJjtnsbqGzTw/edit?usp=sharing

Формула должна создавать строки E5: G8 из строк A5: C6.

Формула должна работать с любым количеством строк.

enter image description here

1 Ответ

0 голосов
/ 11 марта 2019

Я не знаю формул, но могу написать сценарий, поэтому я и сделал. Этот код читает левые столбцы, а затем записывает правые столбцы. Если форматирование листа изменится, потребуются изменения в коде. Скопируйте / вставьте эту функцию в скрипт и запустите функцию test. Если это работает, можно запустить из пользовательского меню вместо использования формулы. Если это не сработает, вставьте сюда ошибку, и я попробую отладить.

function test() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // 5th row to start, 1st col to start, sheet.getLastRow()-4 is the num of rows to read, 3 cols to read
  // [ row, row ... ]
  var left = sheet.getRange(5, 1, sheet.getLastRow() - 4, 3).getValues();
  // filter empty rows
  left = left.filter(function(row) {
    return row.every(function(el) {
      return el != '';
    });
  });
  // hold rows to insert
  // will be [ row, row... ]
  var right = [];
  // for each row create row to insert right
  left.forEach(function(row) {
    var item = row[0];
    var colors = row[1].split(',');
    var price = row[2];
    colors.forEach(function(c) {
      // create row, [item, color, price]
      right.push([item, c, price]);
    });
  });
  // insert rows to right
  // 5th row to start, 5th col to start, right.length is the num of rows to insert, 3 cols to write
  sheet.getRange(5, 5, right.length, 3).setValues(right);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...