【问题标题】:Variables Undefined causing 'No item with the given ID could be found...'变量未定义导致“找不到具有给定 ID 的项目...”
【发布时间】:2019-03-08 20:25:23
【问题描述】:

** 更新:附上示例谷歌表。 https://docs.google.com/spreadsheets/d/196XWcynpe00rLpNRUR2wbq09KKLptEQfZAoMunKBMtw/edit#gid=1457586267

目标是: 教师 1 文件夹 -> 期间 1 天 1 文件夹 -> 学生文件夹 教师 2 文件夹 -> 周期 3 天 2 文件夹 -> 学生文件夹

我已经研究这个代码好几个星期了,它一直给我同样的错误。我正在尝试为一个有两个不同老师的学生创建两个不同的文件夹。第一个在正确的位置完美地创建,但第二个不断崩溃。它说我的变量:resourcePeriodFolder2 和 secondResourceTeacherName 未定义,这导致最后一个变量:resourceFolderID2 也未定义。

任何帮助将不胜感激!

非常感谢!

function createOneFolder() {

var studentFolderList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Student Folders");
var teacherList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Teacher Name and Folder List");

// Open the sheet used
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Student Folders");

var rowId = 3;
var rowIdTeacher = teacherList.getLastRow();

var studentFolderListArray = studentFolderList.getRange("A2:J").getValues();
var teacherFolderListArray = teacherList.getRange("A2:L").getValues();

var teacherName = teacherList.getRange("A" + rowId).getValues();

// get teacher name from student list
var firstStudentPeriod = studentFolderList.getRange("E" + rowId).getValues();
var firstTeacherNameOnStudentList = studentFolderList.getRange("F" + rowId).getValues();

// run loop to get teacher name from list  
for (var k=1; k<=rowIdTeacher; k++) {
  if (firstTeacherNameOnStudentList == teacherFolderListArray[k][0]) {
    var firstResourceTeacherName = teacherFolderListArray[k][0];     
    var resourcePeriodFolder1 = teacherFolderListArray[k][7]; 
  }; 

break;
}

// create folder for one student.
var resourceFolder = sheet.getRange("C" + rowId).getValue() + ", " + sheet.getRange("B" + rowId).getValue() + " ..... grade " + sheet.getRange("D" + rowId).getValue(); 
var resourceFolderID = DriveApp.getFolderById(resourcePeriodFolder1).createFolder(resourceFolder).getId();
sheet.getRange("G" + rowId).setValue(resourceFolderID);   

// get second teacher name from student list
var secondTeacherNameOnStudentList = studentFolderList.getRange("I" + rowId).getValues();
var secondStudentPeriod = studentFolderList.getRange("H" + rowId).getValues();

for (var h=1; h<=rowIdTeacher; h++) {  // Problem somewhere in here.
  if (secondTeacherNameOnStudentList === teacherFolderListArray[h][0]) {
    Logger.log('It works!  Victory!!!!')
    var resourcePeriodFolder2 = teacherFolderListArray[h][9]; // *****undefined even though value is in spreadsheet*****
    var secondResourceTeacherName = teacherFolderListArray[h][0]; // ***undefined even though value is in spreadsheet***           
  };

break;   
}

// create a second resource folder for same student.

var resourceFolder2 = sheet.getRange("C" + rowId).getValue() + ", " + sheet.getRange("B" + rowId).getValue() + " ..... grade " + sheet.getRange("D" + rowId).getValue(); 
var resourceFolderID2 = DriveApp.getFolderById(resourcePeriodFolder2).createFolder(resourceFolder2).getId();  **//CRASHES HERE**
sheet.getRange("J" + rowId).setValue(resourceFolderID2);

}

【问题讨论】:

  • 为什么是break?为什么要在索引 1 的 javascript 数组上开始循环?
  • 我从 1 开始,因为第 0 行是不需要查看的列标题。我应该启动计数器 st 0 吗?另外我想我应该在找到匹配项时打破循环是多余的吗?
  • 看看你的break语句在哪里
  • var resourcePeriodFolder1 = teacherFolderListArray[k][7];var resourcePeriodFolder2 = teacherFolderListArray[h][9]; 我猜他们会在同一列。但他们不是。而且我认为你的 break 语句在错误的地方,或者它们完全不需要。
  • var resourceFolder = sheet.getRange("C" + rowId).getValue() + ", " + sheet.getRange("B" + rowId).getValue() + " ..... grade " + sheet.getRange("D" + rowId).getValue();var resourceFolder2 = sheet.getRange("C" + rowId).getValue() + ", " + sheet.getRange("B" + rowId).getValue() + " ..... grade " + sheet.getRange("D" + rowId).getValue(); 完全相同,因为 rowId 没有改变。

标签: arrays loops google-apps-script directory


【解决方案1】:

也许一个示例电子表格会有所帮助,但不应该是从学生到具有教师姓名的单元格的引用,而不是创建一个循环来查找任何内容吗? 您应该已经知道数据存在的位置并可以直接引用它,还是这个电子表格会不断变化?

【讨论】:

  • 嗨,随着更多学生的加入,情况会有所变化。随着更多教师的加入。我试图让它与使用两名不同老师的一名学生一起工作。一旦我得到它的工作,我可以添加更多。目标是:教师 1,第 1 天第 1 文件夹 - 学生文件夹 教师 2,第 3 天第 2 文件夹 - 学生文件夹
猜你喜欢
  • 2017-02-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2015-10-22
相关资源
最近更新 更多