Как вставить ячейку со значением в каждую N-ю строку в столбце в Google Sheets - PullRequest
0 голосов
/ 25 сентября 2019

Существует список различных значений в виде непрерывного списка (массива) в столбце.
Нам нужно, чтобы они были сгруппированы и разделены в каждой N-й строке (7-й) в другом столбце, вставив между ними некоторый текст. Не целый ряд.Просто клетка .В результате они будут "толкаться вниз" столбец.

+------+-----------+-----------+ | | Col2 | Col3 | +------+-----------+-----------+ | 1 | Sunday | Group 01 | | 2 | Monday | Sunday | | 3 | Tuesday | Monday | | 4 | Wednesday | Tuesday | | 5 | Thursday | Wednesday | | 6 | Friday | Thursday | | 7 | Saturday | Friday | | 8 | 10 | Saturday | | 9 | 20 | Group 02 | | 10 | 30 | 10 | | 11 | 40 | 20 | | 12 | 50 | 30 | | 13 | 60 | 40 | | 14 | 70 | 50 | | 15 | MERCURY | 60 | | 16 | MARS | 70 | | 17 | JUPITER | Group 03 | | 18 | VENUS | MERCURY | | 19 | SATURN | MARS | | 20 | EARTH | JUPITER | | 21 | NEPTUNE | VENUS | | 22 | Mary | SATURN | | 23 | John | EARTH | | 24 | Paul | NEPTUNE | | 25 | Ann | Group 04 | | 26 | ... | Mary | | 27 | ... | John | | 28 | | Paul | | 29 | | Ann | | 30 | | | | 31 | | | | 32 | | | | 33 | | | +------+-----------+-----------+

Я до сих пор пытался и мне удалось получитьжелаемый результат с помощью простого запроса:

=QUERY(({"***Group";B1:B7;"***Group";B8:B14;"***Group";B15:B21;"***Group";B22:B25;}),"SELECT *")

Интересно, хотя.Существует ли более «элегантный» , а также общий способ с использованием формулы или сценария .

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Я предлагаю вам следующее решение на основе скрипта приложений:

function myFunction() {
  var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var firstRow=1;
  var column=2;
  var destColumn=3;
  var increment=7;
  var lastRow=sheet.getLastRow();
  var values=sheet.getRange(firstRow, column, lastRow,1).getValues();
  var array=[];
  var k=1;
  Logger.log(lastRow);
  for(var i=0;i<lastRow;i++){
    if(i%increment==0){
      array.push("Group "+k);
      k++;
    }
     array.push(values[i][0]);
  }
  var outerArray = [];
  for(var j=0;j<array.length;j++){
    var tempArray = [];
    tempArray.push(array[j]);
    Logger.log(array[j]);
    Logger.log(tempArray);
    outerArray.push(tempArray);
  }
  sheet.getRange(1, destColumn, array.length, 1).setValues(outerArray);
}

Рабочий процесс:

  • Вставьте содержимое интересующего столбца вмассив
  • Вставлять дополнительную запись с содержимым каждый increment-й раз
  • Транспонировать массив в синтаксис [column][row]
  • Вставить значения в целевой столбец

Ссылки:

0 голосов
/ 25 сентября 2019

Вы можете использовать Array.splice для вставки массивов в каждую N-ю строку:

/**
 * Inserts string every nth row
 *
 * @customfunction
 * @param {Object[][]} arr Input Column
 * @param {number} every Nth row to insert
 * @param {string} str String to insert
 */
function insertText(arr, every, str) {
  for (
    var i = 0, j = 0;
    i < arr.length - 1 && arr.splice(i++, 0, [str + ++j]);
    i += every
  );
  return arr;
}
const arr = [ //Input col A1:A25 looks like this 
  ['Sunday'],
  ['Monday'],
  ['Tuesday'],
  ['Wednesday'],
  ['Thursday'],
  ['Friday'],
  ['Saturday'],
  ['10'],
  ['20'],
  ['30'],
  ['40'],
  ['50'],
  ['60'],
  ['70'],
  ['MERCURY'],
  ['MARS'],
  ['JUPITER'],
  ['VENUS'],
  ['SATURN'],
  ['EARTH'],
  ['NEPTUNE'],
  ['Mary'],
  ['John'],
  ['Paul'],
  ['Ann'],
];
console.log(insertText(arr, 7, 'Group'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...