Симптом, указывающий на наличие проблемы, - это ошибка: TypeError: Cannot read property "0" from undefined.
, и ошибка присоединяется к строке, являющейся оператором if внутри для l oop. Мне кажется, что проблема в первых нескольких строках кода, так что это то, что я поставлю здесь. Я поставлю полный сценарий в конце.
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, он ломается.
Я воссоздал настройку здесь .
Если вам нужна остальная часть код, вот полный сценарий.
function createDocAndFirstTab(){
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";
}
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,2,controlRoomSheet.getLastRow(),3).setValues(urls);
}