Разделить значение ячейки и реплицировать всю строку

Мне было интересно, какая функция Google Apps Script может помочь мне разделить значение ячейки Google Sheets на n части (с учетом разделителя) и реплицировать всю строку как разные вхождения для этого разделения. Итак, f.i., учитывая эту таблицу:

Имя Страна Спорт Джон Соединенные Штаты Америки Баскетбол_Гольф_Теннис Мэри Канада Теннис_Гольф

Желаемый результат должен быть:

Имя Страна Спорт Джон Соединенные Штаты Америки Баскетбол Джон Соединенные Штаты Америки Гольф Джон Соединенные Штаты Америки Большой теннис Мэри Канада Большой теннис Мэри Канада Гольф

В этом примере разделителем является символ _

Подождите, это не для гугл листов? Моя функция по-прежнему будет работать, но я думал, что вы используете листы.

pgSystemTester 21.11.2022 18:44

@pgSystemTester, да, это для Google Таблиц :)

agustin 21.11.2022 18:46

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

pgSystemTester 21.11.2022 18:48
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
3
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вероятно, вы могли бы сделать это с помощью обычной формулы электронной таблицы (ищите входящее решение от Player0, который, вероятно, укажет на что-то, о чем я должен был подумать...), но поскольку вы попросили решение сценария приложения, это работает:

/**
 * Splits data
 *
 * @param {array} theRange The range of data.
 * @param {string} theSplitter The text used to split.
 * @return the new table
 * @customfunction
 */
function goUSA(theRange, theSplitter) {
  const splitColumn = 2;

  var result = [];
  for (r = 0; r < theRange.length; r++) {
    var aRow = theRange[r];

    //skips empty rows, enabling ability to select entire column
    if (aRow.join('') != '') {
      var tempSplit = aRow[splitColumn].split(theSplitter);
      for (q = 0; q < tempSplit.length; q++) {
        result.push([aRow[0], aRow[1], tempSplit[q]]);
      }
    }
  }
  return result;
}

Разделение столбца 3

function brkaprt() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const osh = ss.getSheetByName("Sheet1");
  osh.clearContents();
  const vs = sh.getRange(2,1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
  let obj = {pA:[]};
  let o = vs.reduce((ac,[a,b,c],i) => {
    c.split("_").forEach(e =>ac.push([a,b,e]) )
    return ac;
  },[]);
  o.unshift(["Name","Country","Sport"]);  
  Logger.log(JSON.stringify(o));
  osh.getRange(1,1,o.length,o[0].length).setValues(o);

}

Execution log
10:56:15 AM Notice  Execution started
10:56:16 AM Info    [["Name","Country","Sport"],["John","USA","Basketball"],["John","USA","Golf"],["John","USA","Tennis"],["Mary","Canada","Tennis"],["Mary","Canada","Golf"]]
10:56:17 AM Notice  Execution completed
А Б С 1 Имя Страна Спорт 2 Джон Соединенные Штаты Америки Баскетбол 3 Джон Соединенные Штаты Америки Гольф 4 Джон Соединенные Штаты Америки Большой теннис 5 Мэри Канада Большой теннис 6 Мэри Канада Гольф

Видеть:

=INDEX(QUERY(SPLIT(FLATTEN(IF(IFERROR(SPLIT(C1:C, "_")) = "",, 
 A1:A&"​"&B1:B&"​"&SPLIT(C1:C, "_"))), "​"), "where Col2 is not null", ))

Вот оно... это будет работать быстрее, чем решение сценария приложения.

pgSystemTester 21.11.2022 19:10

Другие вопросы по теме