Как исправить ошибку Google Script "Ошибка типа: Не удается прочитать свойство 'длина' из неопределенного (строка 59, файл" Код ")"? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть этот код, который отлично работает. Код должен копировать и фильтровать данные из одной электронной таблицы в другую, используя значения в столбце E. Когда я ввожу определенные значения, такие как «Бизнес 2», он работает нормально. Но если я ввожу другие значения, такие как «Business 1», я получаю эту ошибку - «TypeError: Невозможно прочитать свойство« длина »неопределенного (строка 59, файл« Код »)»

Я очистил и урезал содержимое ячейки с = CLEAN (TRIM ())

Вот код

function copySheetValuesV2(){
  var source = SpreadsheetApp.getActiveSheet();
  var sourceName = source.getSheetName();
  var sValues = source.getDataRange().getValues();

  //var rawData = range.getValues()     // get value from spreadsheet 1
var data = []                       // Filtered Data will be stored in this array
for (var i = 0; i< sValues.length ; i++){
if(sValues[i][4] == "Business 1")            // Check to see if column E says "Business 1" if not skip it
{
data.push(sValues[i])
}
}

  var destination = SpreadsheetApp.openById('idvalue');
  var shttoDelete = destination.getSheetByName('Copy of Dashboard');


  source.copyTo(destination);
  var destinationSheet = destination.getSheetByName('Copy of '+sourceName);
  destinationSheet.getRange(2,1,data.length,data[0].length).setValues(data);// overwrite all formulas that the copyTo preserved
  destinationSheet.getRange(data.length + 1,1,destinationSheet.getLastRow(),destinationSheet.getLastColumn()).clearContent();


}

Мне нужна помощь, чтобы узнать, почему скрипт не читает определенные значения из столбца.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Cannot read property 'length' of undefined в вашем случае означает, что массив data пуст

  • Ваш код вставляет sValues в data, если sValues[i][4] == "Business 1".
  • Если нет , data остается пустым, а data[0] не существует и, следовательно, не имеет длины.
  • Вы можете избежать этой ошибки, проверив, что data не пусто перед запуском остальной части кода.
  • Самый простой способ сделать это - использовать оператор if, например,
 if(data[0]){
    source.copyTo(destination);
    var destinationSheet = destination.getSheetByName('Copy of '+sourceName);   
    destinationSheet.getRange(2,1,data.length,data[0].length).setValues(data);// overwrite all formulas that the copyTo preserved    
    destinationSheet.getRange(data.length + 1,1,destinationSheet.getLastRow(),destinationSheet.getLastColumn()).clearContent();
  }
0 голосов
/ 14 февраля 2020

Я набрал текст «Бизнес 1» в другой ячейке. Затем я скопировал его, чтобы заменить существующий текст в столбце.

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