我希望获得一个字符串值 - 稍后将其与if条件进行比较 - 使用Google应用脚本从电子表格中的一列开始。 我搜索了互联网,发现了这个链接 - 抱歉,如果这听起来很愚蠢,我是谷歌应用脚本的新手 - https://developers.google.com/apps-script/class_spreadsheet
var values = SpreadsheetApp.getActiveSheet().getRange(2, 3, 6, 4).getValues();
我想这一定是有帮助的,唯一的问题是我想要获取值的列是动态的,所以如何设置此列的范围
答案 0 :(得分:35)
如果你简单地使用:
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues()
您将获得按行和列索引的工作表中所有数据的2维数组。
为了获得A列,第1行中的值,您使用values[0][0]
,values[1][0]
用于columnA,第2行,values[0][2]
用于列C row1,等等...
如果你需要迭代for循环(在一个列中):
for(n=0;n<values.length;++n){
var cell = values[n][x] ; // x is the index of the column starting from 0
}
如果你需要迭代for循环(在一行中):
for(n=0;n<values[0].length;++n){
var cell = values[x][n] ; // x is the index of the row starting from 0
}
答案 1 :(得分:3)
循环遍历行并获取列值的更简单方法..希望有帮助
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
values.forEach( function(row) {
row[4] // column index as 4
});
答案 2 :(得分:2)
假设您希望使用 getRange(a1Notation) 列 A
中的所有行/单元格:
var values = SpreadsheetApp.getActiveSheet().getRange("A:A").getValues();
答案 3 :(得分:0)
这是我用来在动态列中获取值的脚本:
var SS = SpreadsheetApp.getActiveSheet()
var Avals = SS.getRange("A1:A").getValues();
var numberOfValues = Avals.filter(String).length;
var RangeVals = SS.getRange(1,1,numberOfValues).getValues();
尽管如此,我从未基于动态变化的起点来更改哪个起点。希望了解如何实现。
答案 4 :(得分:0)
这个答案下面提到的所有函数都会输出一个一维数组,我觉得操作起来会稍微方便一些。
另一种获取列或行的方法:
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)
。如果数据区域内没有空单元格,这是理想的解决方案。
扩展@itazzad 的 solution,
// 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 表示法的含义,但 this article 有点帮助。
如果您认为 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)