Автоматически отделяйте и разделяйте строку в листах Google - PullRequest
1 голос
/ 23 марта 2019

В Google листах есть опция, которую можно выбрать в верхнем меню, чтобы разделить текст на столбцы при указании символа.Можно использовать запятую или другие символы.

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

Я использую приложение на Android, которое позволяет сканировать код qr и отправлять строку информации на листы Google.

Пример информации будет выглядеть следующим образом: 464839 | 362 | 2840 | 927 | 72 | 617

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

У меня есть фрагмент кода, который я нашел, но он не работает для меня.

var range = SpreadsheetApp.getActiveRange();
var cell = range.getCell(1, 1); // Gets the cell A1 
var cellValue = cell.getValue(); // Gets the value of the cell A1

var cellArray = cellValue.split("|"); // Splits the cell value by ',' and  stores it in array.

//Iterate through the array
for(var i = 0; i < cellArray.length; i++){
    Logger.log(cellArray[i]);
}

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

1 Ответ

0 голосов
/ 23 марта 2019

Ниже приведен код, который вы помещаете в устанавливаемый триггер , который выполняется с регулярным интервалом и перебирает значения каждой строки в столбце A и пытается разделить значение с помощью символа канала и заменить, а затем записать эти значения разделения вдоль столбцов в этой строке. Если это уже было сделано в прошлом, функция выдаст ошибку, когда попытается разделить значения, потому что не существует символа канала, но try / catch перехватит эту ошибку и позволит функции продолжить выполнение цикла.

    function myFunction() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NameOFSheet"); //Change "NameOFSheet to the actual name of the sheet.
      var col1Values = sheet.getSheetValues(1, 1, sheet.getLastRow(), 1) //Gets 2d (2 dimensional) array of the Values in Column 1 (getSheetValues(startRow, startColumn, numRows, numColumns)_
      var splitVals = []; //Instantiate an empty 1d array variable
      //Iterate through the 2d array and set the values
      for(var i = 0; i < col1Values.length; i++){
        try{
          splitVals = col1Values[i][0].split("|"); //Creates a 1d array of values split at every occurrence of the pipe symbol ("|").
          //If there is no pipe symbol (which would be the case if this operation has already happened then the array will be blank because .split will throw an error which will get "caught" in the try catch and the row will be skipped

          //Iterate over the splitVals array and set the values of the columns along the row (i+1) that you are in.
          for(var col = 0; col < splitVals.length; col++){
            sheet.getRange(i+1, col+1).setValue(splitVals[col])
          }
        }catch(e){}

      }
    }

Я прокомментировал код для объяснения. Я бы порекомендовал прочитать 2-мерные массивы , чтобы помочь вам лучше понять их и приведенный выше код.

...