如何解决这个问题“执行失败:这些列已超出范围。”错误?

时间:2014-01-19 00:24:53

标签: javascript google-apps-script

我已经写了这个函数,但是我收到一个错误“执行失败:这些列超出范围。” (在我的翻译中)。生成错误的行是var CellName = sheet.getRange(1, i+1);。我得到了这个结果:

enter image description here

这些是日志:

enter image description here

这是成绩单:

enter image description here

代码如下。我怀疑为什么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);
    }

2 个答案:

答案 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);
  }