我正在创建一个脚本来隐藏工作表中的空列。每个包含数据的列在标题上都有某种值。所以我正在创建一个数组,它封装所有标题并减去所有空单元格。然后我使用hideColumns隐藏最后一个标题旁边的所有列。
这是剧本:
function hiding() {
var hoja = SpreadsheetApp.getActiveSheet();
var header = hoja.getRange(1, hoja.getMaxColumns()).getValues();
for (i in header) {
if (header[i].length == 0) {
header.splice(i, 1);
}
}
var k = header.length + 1;
hoja.hideColumns(k, hoja.getMaxColumns());
}
我不断收到错误消息“这些列超出范围。”当我调试代码时。
答案 0 :(得分:0)
原则上getRange(row, column)只返回最后一列(只传递两个参数,返回带有单个单元格的“范围”),这样数组就会有一个值标题。
getValues()返回一个二维数组值,因此要确定所需值的长度,如:
header[0][i].length
根据文档hideColumns(columnIndex, numColumns):隐藏从给定索引开始的一个或多个连续列。
方法hideColumns(columnIndex, numColumns)的第二个参数表示从第一个参数中指定的索引开始隐藏的列数。
在这种情况下,会生成错误,因为它从某个索引开始并尝试隐藏大多数可用列,例如,hoja.getMaxColumns()
返回20并尝试执行:
hoja.hideColumns(k, hoja.getMaxColumns());
从索引2(k的值),隐藏了接下来的20列,实际上是超出界限。
也许这样的代码可能会有所帮助:
/* CODE FOR DEMONSTRATION PURPOSES */
function hideEmptyHeaders() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var headers = ss.getRange(1, 1, 1, ss.getMaxColumns()).getValues()[0];
var columnIndex = 0, numColumns = 0;
headers.forEach(function(header, index) {
if (!header) {
if (!columnIndex)
columnIndex = index + 1;
numColumns++;
} else if (columnIndex > 0) {
ss.hideColumns(columnIndex, numColumns);
columnIndex = numColumns = 0;
}
});
if (columnIndex > 0) ss.hideColumns(columnIndex, numColumns);
}