原則として、getRange(row, column)は最後の列のみを返します (引数を 2 つだけ渡すと、1 つのセルを含む「範囲」が返されます)。そのため、配列には単一の値ヘッダーが含まれます。
getValues()は値の 2 次元配列を返すため、値の長さを決定するには次のようなものが必要です。
header[0][i].length
ドキュメントhideColumns(columnIndex, numColumns)によると: 指定されたインデックスから始まる 1 つ以上の連続する列を非表示にします。
メソッドhideColumns(columnIndex, numColumns)の 2 番目のパラメーターは、最初のパラメーターで指定されたインデックスから始まる非表示にする列の数を示します。
この場合、特定のインデックスから開始し、使用可能な列のほとんどを非表示にしようとするため、エラーが生成されます。たとえば、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);
}