Мне было интересно, какая функция Google Apps Script может помочь мне разделить значение ячейки Google Sheets на n части (с учетом разделителя) и реплицировать всю строку как разные вхождения для этого разделения. Итак, f.i., учитывая эту таблицу:
Желаемый результат должен быть:
В этом примере разделителем является символ _
@pgSystemTester, да, это для Google Таблиц :)
Хорошо, это, очевидно, сработает, однако я уверен, что это можно сделать без сценариев приложений...
Вероятно, вы могли бы сделать это с помощью обычной формулы электронной таблицы (ищите входящее решение от 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
Видеть:
=INDEX(QUERY(SPLIT(FLATTEN(IF(IFERROR(SPLIT(C1:C, "_")) = "",,
A1:A&""&B1:B&""&SPLIT(C1:C, "_"))), ""), "where Col2 is not null", ))
Вот оно... это будет работать быстрее, чем решение сценария приложения.
Подождите, это не для гугл листов? Моя функция по-прежнему будет работать, но я думал, что вы используете листы.