Палец вверх 0
Перевод
Перевод

Способ разделения строки на отдельные ячейки в Sheets / App Script

Я пытаюсь разбить строку на отдельные ячейки, но порядок подстрок будет отличаться от того, как она выглядит в строке изначально. Не все части строки необходимы, и длина каждой подстроки не является статической. Мне удалось добиться чего-то работоспособного в отдельном проекте, где длина подстроки была статической, используя lastIndexOf, но это было невероятно неуклюже.

Я надеюсь, что кто-то может указать мне на лучший способ решения проблемы.

Каждая строка данных будет выглядеть так:

01|020202|03|0404040404|05|0606060606|

Мой предыдущий код был эквивалентен этому:

function splitString() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("Data");
 var input = sheet.getRange(2,4).getValue(); 

 var data1 = input.substring(input.lastIndexOf("!")-5,input.lastIndexOf("|")-1);
 var data2 = input.substring(input.lastIndexOf("|")-10, data1);

 // etc.

 sheet.getRange(3,2).setValue(data1);
 sheet.getRange(4,2).setValue(data2);

 // etc.

}

Кто-нибудь может предложить лучший способ сделать это? Любая помощь приветствуется.

javascript google-apps-script google-sheets
задан limonvnx 2 мая 2018 г., 18:28:27
источник

3 ответа

Решение 1
Перевод
Перевод

Похоже, вам нужно, чтобы каждый элемент находился в одном и том же столбце в разных строках. Используйте String.prototype.split (), затем преобразуйте полученный массив в 2D-массив.

В следующем примере для простоты, построенной на «чистом» JavaScript, используйте forEach, но есть несколько других способов сделать то же самое.

var s = '01|020202|03|0404040404|05|0606060606|';
var t = s.split('|');
var output = [];
t.forEach(function(q){
 output.push([q]);
});
console.info(output);
ответ дан Rubén 2 мая 2018 г., 20:21:36
источник
Палец вверх 1
Перевод
Перевод

Посмотрите различные строковые методы API для Javascript в MDN . Должен быть один, чтобы разбить строку на массив, используя разделитель (символ «|» в вашем случае). Затем setValues метод setValues класса Range, который позволяет вам установить ряд ячеек, используя массив с одним вызовом метода.

ответ дан Dimu Designs 2 мая 2018 г., 18:42:48
источник
Палец вверх 1
Перевод
Перевод
function splitString() {
  var theSplitString 
  ="01|020202|03|0404040404|05|0606060606|".split("|");
  Logger.log(theSplitString);
  // the result is an array [01, 020202, 03, 0404040404, 05, 0606060606, ]
}`

Тогда как предложено использовать range.setValues

ответ дан John More 2 мая 2018 г., 19:49:41
источник