У меня есть данные в 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 часов на массивах, и доступная документация ужасна