类型错误: 无法获取未定义的属性"长度"



这里是半新手

我正在尝试运行一个脚本,将一行从一个电子表格复制到另一个电子表——它最初工作,然后出现TypeError。

TypeError:无法读取未定义的属性"length"copyrange1@onedit目的地.gs:26onEdit@onEdit destination.gs:2

我正在寻找基于单元格AQ中的值的具有三个目标工作表的多个函数,然后让它从源工作表中删除行。

有什么建议吗?

function onEdit(){
copyrange1();
copyrange2();
copyrange3();
}
function copyrange1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Position Activity'); //source sheet
var testrange = sheet.getRange('AQ:AQ'); //range to check
var testvalue = (testrange.getValues());
var csh = ss.getSheetByName('Suspended Pending'); //destination sheet
var data = [];
var j =[];
//Condition check in AQ:AQ; If true copy the same row to data array
for (i=0; i<testvalue.length;i++) {
if ( testvalue[i] == 'Suspended - Pending') {
data.push.apply(data,sheet.getRange(i+1,1,1,43).getValues());
//Copy matched ROW numbers to j
j.push(i);
}
}
//Copy data array to destination sheet
csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);
//Delete matched rows in the source sheet
for (i=0;i<j.length;i++){
var k = j[i]+1;
sheet.deleteRow(k);
//Alter j to account for deleted rows
if (!(i == j.length-1)) {
j[i+1] = j[i+1]-i-1;
}
}
} 

提前感谢

问题:

只有当AQ:AQ中存在单元格值为'Suspended - Pending'的行时,才会填充
  • data
  • 由于脚本在复制单元格值为'Suspended - Pending'的行后将删除这些行,因此在连续执行中,data将保持为空数组[]
  • 如果data为空,则data[0]未定义,因此它没有length

解决方案:

在使用csh.getRange(...).setValues(data);之前,请确保已填充data

function copyrange1() {
// ...stuff...
if (data.length) {
csh.getRange(csh.getLastRow()+1,1,data.length,data[0].length).setValues(data);
// ...more stuff...
}
}

最新更新