如何修复 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