我已经写了这个函数,但是我收到一个错误“执行失败:这些列超出范围。” (在我的翻译中)。生成错误的行是var CellName = sheet.getRange(1, i+1);
。我得到了这个结果:
这些是日志:
这是成绩单:
代码如下。我怀疑为什么for循环在header7停止而不是所有标题?
var font_size = 12;
var headers = "HEADER1 HEADER2 HEADER3 HEADER4 HEADER5 HEADER6 HEADER7 HEADER8 HEADER9";
var arrayHeaders = headers.split(/[\s\t]+/);
Logger.log("arrayHeaders = " + arrayHeaders);
for (var i = 0; i < arrayHeaders.length; i++){
Logger.log("arrayHeaders.length = " + arrayHeaders.length);
var CellName = sheet.getRange(1, i+1);
CellName.setValue(arrayHeaders[i]).setBackgroundRGB(34, 139, 34).setFontSize(font_size).setFontWeight("bold").setFontFamily("Arial");
// There is no column 0, so i+1 to start
sheet.setColumnWidth(i+1, 100);
}
答案 0 :(得分:1)
在以下函数中使用您的代码,脚本完成且没有错误,并且预期的列标题位于电子表格的每个单元格中:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var font_size = 12;
var headers = "HEADER1 HEADER2 HEADER3 HEADER4 HEADER5 HEADER6 HEADER7 HEADER8 HEADER9";
var arrayHeaders = headers.split(/[\s\t]+/);
Logger.log("arrayHeaders = " + arrayHeaders);
for (var i = 0; i < arrayHeaders.length; i++){
Logger.log("arrayHeaders.length = " + arrayHeaders.length);
var CellName = sheet.getRange(1, i+1);
CellName.setValue(arrayHeaders[i]).setBackgroundRGB(34, 139, 34).setFontSize(font_size).setFontWeight("bold").setFontFamily("Arial");
// There is no column 0, so i+1 to start
sheet.setColumnWidth(i+1, 100);
}
}
我最初认为,因为在屏幕截图中只有7列getRange失败,因为它试图获取的列索引尚不存在。在测试期间,我发现getRange会根据需要创建新列。
我只能认为您的工作表中可能有受保护的范围或冻结列?在新的电子表格中尝试上述功能,看看会发生什么。
答案 1 :(得分:1)
实际上,新的Google电子表格编辑器不会再根据需要插入新列。所以,我必须插入这个if块:
if ( (i+1) > sheet.getLastColumn() ) {
sheet.insertColumnAfter(i);
}