开发者问题收集

如何修复 Google 脚本错误“TypeError:无法读取未定义的属性‘length’(第 59 行,文件“Code”)”?

2020-02-14
4196

我有一段运行良好的代码。该代码应该使用 E 列中的值将数据从一个电子表格复制并过滤到另一个电子表格。当我输入某些值(如“Business 2”)时,它运行良好。但如果我输入其他值(如“Business 1”),我会收到此错误 - “TypeError:无法读取未定义的属性‘length’(第 59 行,文件“Code”)”

我已使用 =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个回答

无法读取未定义的属性“长度” ,在您的情况下意味着数组 data 为空

  • 如果 sValues[i][4] == "Business 1" ,您的代码会将 sValues 推送到 data
  • 如果不是, 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();
  }
ziganotschka
2020-02-14

我在另一个单元格中输入了文本“Business 1”。然后我将其复制以替换列中的现有文本。

Smith O.
2020-02-14