この回答で後述するすべての関数は、1 次元配列を出力します。これは、操作が少し便利になると思います。
解決策 1:
列または行を取得する別の方法:
function getColumn(activeSheet, columnIndex) {
return activeSheet.getRange(1, columnIndex)
.getDataRegion(SpreadsheetApp.Dimension.ROWS)
.getValues()
.flat();
}
function getRow(activeSheet, rowIndex) {
return activeSheet.getRange(rowIndex, 1)
.getDataRegion(SpreadsheetApp.Dimension.COLUMNS)
.getValues()[0];
}
注:これは、指定された方向に隣接するセルにあるデータのみをフェッチします。
例: 1, 2, 3, 空白, 4, 空白, 5 ----- 4 と 5 はスキップされます。も参照してくださいgetDataRegion(dimension)
。データ領域内に空のセルがない場合、これは理想的なソリューションです。
解決策 2:
@itazzad のソリューションを拡張し、
// JS object containing indices as keys and capital letters as value.
const INDEX_ALPHABET = Array.from(new Array(26))
.reduce((accumulatedObj, _, index) =>
(accumulatedObj[index + 1] = String.fromCharCode(index + 65), accumulatedObj), {});
// uses a1 notation
function getColumn(activeSheet, columnIndex) {
var columnA1Notation = INDEX_ALPHABET[columnIndex]
return activeSheet.getRange(columnA1Notation + ':' + columnA1Notation)
.getValues()
.flat();
}
// uses a1 notation
function getRow(activeSheet, rowIndex) {
return activeSheet.getRange(rowIndex + ':' + rowIndex)
.getValues()[0];
}
を参照してくださいgetRange(a1Notation)
。R1C1表記とA1表記の意味がよくわからなかったのですが、こちらの記事が少し役に立ちました。
解決策 3:
getValues()
高価な呼び出しでありRange
、サイズが大きくなるにつれて実行時間が長くなる可能性があると思われる場合は、これを確認してください。基本的に、最後の行または列を取得し、それを使用してRange
、関連するデータを省略せずに を削減します。
function getRow(activeSheet, rowIndex) {
var lastColumn = activeSheet.getDataRange().getLastColumn()
return activeSheet.getRange(rowIndex, 1, 1, lastColumn)
.getValues()[0]
}
function getColumn(activeSheet, columnIndex) {
var lastRow = activeSheet.getDataRange().getLastRow()
return activeSheet.getRange(1, columnIndex, lastRow, 1)
.getValues()
.flat()
}
注:行または列のスライスを取得したい場合は、チェックアウトしてくださいgetRange(row, column, numRows, numColumns)