我一直在研究一个脚本,该脚本将传入的数据分成多个部分,将每个部分设置到工作表上,然后对其进行相应的格式化。在空白表上以及错误首次发生之前的先前数据上,它连续好几次都没有问题。
当代码在循环的第三次(五分之一)迭代期间调用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);
}
});
答案 0 :(得分:1)
这可能与sheet.getParent().setNamedRange(sheet.getName()+'_'+x, range);
有关
但不是#135行。
目前尚不清楚原因,并且未在任何地方进行记录,但setNamedRange()有时不允许您将工作表名称包含在范围名称字符串中。尝试以某种方式修改范围的命名。