我收到消息“哎呀。在脚本执行完毕后,不可能隐藏合并开始。”
该脚本隐藏范围内任何列,其标题字段为空,并显示非空的列。我发现如果某些列与它们有垂直合并并导致麻烦。这是电子表格的链接: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;
}
}
如果这个细胞未合并,则没有问题。如果我手动执行此操作再次没有问题,但我需要自动拥有此功能。如果有人可以帮我解决这个问题,那就太好了!
答案 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 {
...