表明我有问题的症状是错误:TypeError: Cannot read property "0" from undefined.
,并且错误附加到在for循环内的if语句的行上。在我看来,问题出在代码的前几行,所以这就是我要介绍的内容。我将完整的脚本放在最后。
var ss = Spreadsheetapp.getactive();
var controlRoomSheet = ss.getSheetByName("Master Doc");
var urls = controlRoomSheet.getRange(1,2,50,3).getvalues();
for(var i = 3; i < urls.length + 3; i ++){
if(urls[i][0].slice(0,3) == "1st" && urls[i-3][1] == null || urls[i-3][1] == "MISSING FACILITY NAME"){
urls[i-3][1] = "MISSING FACILITY NAME";
要找到问题,我使用了google的logger.log命令查看内容。 urls
并未显示为数组,仅是该数组中所有应有的值之间都用逗号隔开,就是这样。
我编写了一个单独的脚本,该脚本仅执行三件事,打开文档,按名称获取页面,并首先检索单个单元格的内容,然后检索整个范围的内容。在Logger.log中检查了结果,工作正常。然后,我将相同的代码移回我的脚本中,然后bam崩溃了。
我已经重新创建了设置here。
如果需要其余代码,请参见完整脚本。
function createDocAndFirstTab(){
var ss = Spreadsheetapp.getactive();
var controlRoomSheet = ss.getSheetByName("Master Doc");
var urls = controlRoomSheet.getRange(1,3) == "1st" && urls[i-3][1] == null || urls[i-3][1] == "MISSING FACILITY NAME"){
urls[i-3][1] = "MISSING FACILITY NAME";
}
else if(urls[i][0].slice(0,3) == "1st" && urls[i][0].slice(0,5) == "https" && urls[i][2] != "Yes"){
var newDoc = urls[i-3][1];
var newSS = Spreadsheetapp.create('newDoc');
newSS.rename(urls[i-3][1]);
var newDocUrl = urls[i][1];
var sourceSS = Spreadsheetapp.openByUrl(newDocUrl);
var allSourcetabs = sourceSS.getSheets();
var sourcetab = allSourcetabs[0];
sourcetab.copyTo(newSS);
var newSSTabs = newSS.getSheets();
var rawRoster1 = newSSTabs[1];
rawRoster1.setName("Roster");
urls[i-2][1] = newSS.getUrl();
urls[i][2] = "Yes";
//. before closing out the creation of this file,place it in the correct folder (and make sure that folder exists!)
DriveApp.searchFolders(controlRoomSheet.getRange('C1').getvalues());
}
}
controlRoomSheet.getRange(1,controlRoomSheet.getLastRow(),3).setvalues(urls);
}