Попытка воспроизвести функцию Excel "LEFT ()" в GoogleScript - PullRequest
0 голосов
/ 16 октября 2018

У меня есть данные в Google Sheets, которые мне нужно очистить.В частности, один столбец может содержать слишком много символов, и я хотел бы взять первые 200 символов только в том случае, если его длина составляет 201+.

Я нашел способ сделать это, но это настолько неприятно, что я могу видетьклетки корректируются 1 на 1 ... визуально.У меня более 100 тысяч строк для обработки, поэтому мое решение на самом деле не вариант.

Вот код, который сейчас не работает.Я работаю над range.Value = LEFT(range.Value,200); строкой

function myFunction() {
  var maxRow = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow();  
  removeOverLenght(4, maxRow);  //COLUMN D index = 4  
}



function removeOverLenght(column, maxRow){  

  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
  var rangeArray = [];

  rangeArray = activeSheet.getRange(1,column,maxRow,1).getValues();

  for(var i=0;i<rangeArray.length;i++){

    rangeArray[i] = rangeArray[i].toString().substr(0, 200);

  }

  activeSheet.getRange(1,column,maxRow,1).setValues([rangeArray]);     // I get an error saying that the length is 1 but should be 74 (maxRow value)
  //activeSheet.getRange(1,column,1,maxRow).setValues([rangeArray]);   //This code runs without error, but the values are pasted on the same row, on 74 different columns, flipping from vertical to horizontal which is nonsense
}

Я искал и читал тонны статей, но не мог заставить работать функции подстроки, по какой-то причине я не могу дажеполучить доступ к ним.Кроме того, если есть способ выполнить все ячейки одновременно, не выполняя функцию for(), любые выводы приветствуются.

РЕДАКТИРОВАТЬ: Я добавил предложенное решение, и оно работает для подстроки.Однако, пытаясь сделать это как массив, в результате все ячейки получают одинаковое значение (исходя из D1), даже если getValue является частью for().Есть идеи, что я могу делать не так?Я пытался основывать свой код на лучших практиках , но я действительно не знаю, что они делают по-другому

EDIT2: я мог бы получить свой код дальше, используя getValues ​​() внецикл for (), обрабатывающий значения в цикле и использующий setValues([Array]).Единственная проблема заключается в том, что он не позволяет мне устанавливать значения в одном и том же диапазоне, мне нужно переключить getRange(1,column,maxRow,1) на getRange(1,column,1,maxRow), что является бессмысленным, потому что это переворачивает столбец в строку.Любая идея?Я читал около 4 часов на массивах, и доступная документация ужасна

1 Ответ

0 голосов
/ 16 октября 2018

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

Попробуйте это:

function removeOverLenght(column, maxRow){  
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();  
  for(var i=1;i<maxRow+1;i++){
    var range = activeSheet.getRange(i,column),
        // ensure you're working with a string
        value = "" + range.getValue();
    range.setValue(value.substr(0, 200));
  }  
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...