Как разделить значения из массива? - PullRequest
0 голосов
/ 05 июля 2019

Я хотел бы разделить значения из массива с помощью '|' разделитель. Разделение значений будет записано с добавлением еще одного столбца

UID     NAME    MTD DEVICE  APPLICATION APPLICATION REV
ABC     Melanie 10230   1520    google |mozilla 1.2|4
COCO    Ronald  222222  2682    explorer|ecosia 2.0|3
ZERTY   Cecilia 55555   634     google|ecosia   1.001|2.02

до:

UID     NAME    MTD     USAGE   DEVICE  APPLICATION APPLICATION REV 
ABC     Melanie 10230   1520    google  mozilla 1.2 4
COCO    Ronald  222222  2682    explorer ecosia 2   3
ZERTY   Cecilia 55555   634     google  ecosia  1.001   2.02

Я попытался разделить функцию, но я не могу заменить, получить значения всего диапазона. Здесь я могу разделить только одну клетку.

function Separate() {

    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet29');
    var lr = spreadsheet.getLastRow();
    var lc = spreadsheet.getLastColumn();
    var ss = SpreadsheetApp.getActiveSpreadsheet();

    var sheet1 = ss.getSheetByName('Sheet29');
    var range1 = sheet1.getRange(1, 1, sheet1.getLastRow(), 13);
    var values1 = range1.getValues();;

    var cellToSplit = [];

    cellToSplit = spreadsheet.getRange(2, 5, sheet1.getLastRow()).getValue();

    Logger.log(cellToSplit);
    var cellArray = cellToSplit.split("|"); // Splits the cell value by ',' and stores it in array.
    Logger.log(cellArray); //Array of 2 values  

    for (var i = 0; i < cellArray.length; i++) {
        Logger.log(cellArray[i]); //Separate only one cell 
    }

1 Ответ

0 голосов
/ 05 июля 2019

Проще разделить все значения, а не только "|".Во-первых, используйте функцию split (), как вы сказали, но вот так:

  var values =  spreadsheet.getRange(2, 5, sheet1.getLastRow()).getValue();
  var cellTosplit =  values.split(/[\s| ]+/); //here we separate by spaces and by |

Поскольку вы хотите снова записать их на лист, можно сохранить ячейки в двумерном массиве:

  var array2d = [[],[]];

  var pos = 0; //position of the cells array    


    for (var y = 0; y < rows; y++) {

      array2d[y] = []; 

      for (var x = 0; x <= columns; x++) { 

        array2d[y][x] = cellsTosplit[pos]; //Or you can use this loop to directly write the values in the range you want instead, instead of using the 2D array
        pos++;  
    }


   }

Теперь вы можете написать array2d[row][column] в нужных клетках.Как я уже сказал, вы можете сделать еще один цикл foor для итерации по Range и использовать setValues(array2d[y][x]), или использовать тот же цикл вместо 2D-массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...