哎呀。隐藏合并开始是不可能的

时间:2013-08-30 06:54:16

标签: javascript google-apps-script google-sheets

我收到消息“哎呀。在脚本执行完毕后,不可能隐藏合并开始。”

该脚本隐藏范围内任何列,其标题字段为空,并显示非空的列。我发现如果某些列与它们有垂直合并并导致麻烦。这是电子表格的链接:https://docs.google.com/spreadsheet/ccc?key=0AphsvceI4elpdGtTSWwtalFpT2xkUWxvNDV1cVZ1S1E&usp=sharing

脚本代码是:

var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var customColumnsRanges = activeSpreadsheet.getRangeByName("TheseOnes");

function resetColumnsVisibilityIfNotBlank() {

  var sheet = customColumnsRanges.getSheet()
  var column = customColumnsRanges.getColumn();
  var length = customColumnsRanges.getWidth();
  var customColumns = customColumnsRanges.getValues();

  for (var i = 0; i < length; ++i) {

    if (customColumns[0][i] == "") {
      sheet.hideColumns(column);
    } else {
      sheet.showColumns(column);
    }

    ++column;

  }

}

如果这个细胞未合并,则没有问题。如果我手动执行此操作再次没有问题,但我需要自动拥有此功能。如果有人可以帮我解决这个问题,那就太好了!

1 个答案:

答案 0 :(得分:1)

在隐藏列之前,使用Range.breakapart()取消合并。您需要获取操作范围 - 在此示例中,我们使用Range.offset()来选择列。请注意,它会从customColumnsRanges行到工作表底部选择所有单元格。

    ...
    if (customColumns[0][i] == "") {
      // Get a range containing just this column, and break apart any merges.
      var columnRange = customColumnsRanges.offset(0,i,sheet.getMaxRows()-customColumnsRanges.getRow());
      columnRange.breakApart();
      sheet.hideColumns(column);
      Logger.log('Hiding column ' + column);
    } else {
    ...