Я работал над сценарием, который принимает входящие данные в разделы, устанавливает каждый раздел на лист, а затем форматирует его соответствующим образом. Он работал хорошо, без проблем несколько раз подряд, как на пустом листе, так и на предыдущих данных до того, как произошла ошибка.
Ошибка возникает, когда код вызывает sheet.getLastRow()
во время третьей (из пяти) итерации цикла, как показано здесь . Я не заметил ничего неуместного в отладочных данных , поэтому предположил, что ошибка должна быть в вызове getLastRow
. Я переделал код без getLastRow
, но такая же ошибка возникает в другой строке при попытке применить группирование строк
Оба эти вызова отлично работают первые 2 раза в цикле. Почему не третий ??
// For each section apply it to sheet
sections.forEach( function(x) {
var sect = collectionOfSections[x];
if (!sect) return;
// If sheet empty apply to first row, otherwise apply after last row + spacing
var row = (sheet.getLastRow())
? sheet.getLastRow() + spacing
: 1;
// Grab the first cell of range
var cell = sheet.getRange(row, 1);
if (sect.length === 1) {
// Format according to length and content
cell.offset(0, 0, 1, sect[0].length)
.setValues(sect)
.setBackground(colors[0])
.setHorizontalAlignment('center')
.setFontFamily(fontFamily)
.setFontWeight('bold')
.setFontSize(
(x===sections[0])
? e_fontSizes[0]
: e_fontSizes[1]
);
cell.offset(0, 0, 1, sect[0].filter( function(y) {return y === ''} ).length + 1)
.merge()
.setFontStyle('italic');
cell.offset(0, sect[0].length - 1, 1, maxWidth - sect[0].length + 1)
.merge()
.setBackground(
(x === sections[0])
? colors[0]
: colors[2]
);
} else {
cell.offset(0, 0, 1, maxWidth)
.merge()
.setValue(sect[0][0])
.setBackground(colors[0])
.setHorizontalAlignment('center')
.setFontSize(e_fontSizes[1] + 1)
.setFontWeight('bold')
.setFontFamily(fontFamily)
.setFontStyle('italic');
cell.offset(1, 0, 1, sect[1].length)
.setValues([sect[1]])
.setHorizontalAlignment('center')
.setFontFamily(fontFamily)
.setFontSize(e_fontSizes[1])
.setFontWeight('bold');
// for loop start 2, set Values then iterate through each and format accordingly
for (var i = 2; i < sect.length; i++) {
cell.offset(i, 0, 1, sect[i].length)
.setValues([sect[i]])
.setFontFamily(fontFamily)
.setFontSize(e_fontSizes[1]);
sect[i].forEach( function(y, j) {
if(!isNaN(y) && y.toString().length > 9) cell.offset(i , j, 1, 1).setHorizontalAlignment('center').setNumberFormat(phoneFormat);
if(y.toString().indexOf('@') > -1) cell.offset(i, j, 1, 1).setHorizontalAlignment('center');
});
} // Apply row banding around content
cell.offset(1, 0, sect.length - 1, maxWidth)
.applyRowBanding()
.setHeaderRowColor(colors[1])
.setFirstRowColor(colors[2])
.setSecondRowColor(colors[3]);
}
if (x != sections[0]) {
// If not first section, give section a named range
var range;
if (sect.length > 2) range = cell.offset(2, 0, sect.length - 2, maxWidth);
else range = cell.offset(0, sect[0].length - 1, 1, maxWidth - sect[0].length + 1);
sheet.getParent()
.setNamedRange(sheet.getName() + '_' + x, range);
}
});