我一直试图让一些代码在函数中的for / if循环之后在函数内运行但代码不起作用。请查看代码的底部,这里没有运行'。
List<Integer> list = new List<Integer>();
如果我硬编码某些数据,我就会在行上出错:
function getClassListing(){
var classSheet = SpreadsheetApp.openById('ID').getActiveSheet();
var lastRow = classSheet.getLastRow();
var lastColumn = classSheet.getLastColumn();
var classData = classSheet.getRange(1, 1, lastRow, lastColumn).getValues();
return classData
}
function processForm(formdata) {
var classArray = [];
var personSpreadsheet = DriveApp.getFilesByName(formdata.SomeName);
var spreadsheetId = consumerSpreadsheet.next().getId();
var personSheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet();
var lastRow = personSheet.getLastRow();
var classSpreadsheet = getClassListing();
for (i=0 ; i<classSpreadsheet.length; i++){
var spreadSheetID = classSpreadsheet[i+1][0];
var formID = formdata.a[i];
var className = classSpreadsheet[i+1][1];
if (formID == spreadSheetID){
classArray.push(formID);
Logger.log('match');
Logger.log(classArray.length);
}
}
Logger.log('nothing runs here');
}
错误是TypeError:无法读取属性&#34; 0&#34;来自undefined。 (第66行,文件&#34;代码&#34;)
我使用的硬编码数据是一个简单的二维数组: var classSpreadsheet = [[1,2,3,4,5,6,7],[1,2,3,4,5,6,7]];
不要理解为什么它会在调试器中引发错误但是当我尝试登顶时我的所有比较都运行得很好甚至登录每个循环。唯一不起作用的是最后一个Logger.log语句,我想用它运行的一些逻辑替换它。
答案 0 :(得分:0)
我认为就是这一行:
var spreadSheetID = classSpreadsheet[i+1][0];
如果有意义的话,[i + 1]正在寻找阵列中不存在的第一列。也许留在[i]?
例如,如果您已将3x2数据放入classData,那么您将拥有:
var classData = [[a,b],[c,d],[e,f]]
调用它将是:
alert(classData[0][0] + classData[0][1] ....... + classData[2][1]);
您的代码
for (i=0 ; i<classSpreadsheet.length; i++){
var spreadSheetID = classSpreadsheet[i+1][0];
循环3次,从[1] [0]开始而不是[0] [0],结束于[3] [1]而不是[2] [1]。没有classSpreadsheet [2] [0]这就是为什么它弹出而不是执行你的最后一个Logger。