这个答案下面提到的所有函数都会输出一个一维数组,我觉得操作起来会更方便一些。
解决方案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, blank, 4, blank, 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)