我想做一些非常简单的事情,这是传递一个范围到一个脚本函数在谷歌表,并有它返回第一行的第一个值。下面是我的函数:
function totalTake(pRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getRange(pRange)
const numRows = range.getNumRows();
const numCols = range.getNumColumns();
return range[0,0]
}
我已经用参考1,1尝试过了,没有什么不同。我在单元格中传入=totalTake("F4:H74")
,在第一个值中肯定有一个字符串值。它返回正确的行数或列数,因此它得到一个数组,但我怀疑其中没有值。我已经尝试修改sheet =
作业,以包括当前的工作表;没有任何区别:返回值为空。
我到底错过了什么?
编辑:以这种方式提出问题可能会产生误导,但它应该被视为"在x和y的确定位置获得任意单元格值",而不仅仅是第一行中的第一个单元格。但是,在迭代时,我未能让它找到值,导致我怀疑提取的范围充满了空值,我将其简化为只找到一个已知值的单元格。
稍微详细说明一下这个问题:这些值的数组使用基于0还是基于1的数组表示法?答:基于零的
我相信你的目标如下。
- 您要检索范围的第一行和第一列的值。
- 你想使用脚本作为自定义函数
- 当
=totalTake("F4:H74")
被放入一个单元格时,您想要检索单元格"f4"的值。- 从
it return the first value in the first row.
,我是这样理解的。
- 从
在这种情况下,我想建议修改return range[0,0]
如下:
:
return range[0,0]
:
return range.getValue();
- 在此修改中,当将
=totalTake("F4:H74")
放入单元格时,单元格的值"F4"返回。- 从
it return the first value in the first row.
,我是这样理解的。如果我误解了你的目标,请告诉我。我想修改一下
- 从
注意:
- 在您的脚本中,似乎没有使用
numRows
和numCols
。当需要使用时,请修改脚本。 参考:
- getValue ()
补充道:
从以下回复中,
实际目标是获取范围内任意x,y位置的值。
我理解如下。
- 您希望通过给出范围的坐标来从范围中检索值。但在本例中,坐标的左上角是
(x, y) = (0, 0)
。
在这种情况下,下面的修改如何?
:
return range[0,0]
:
return range.offset(y, x).getValue();
- 在这种情况下,请放入
=totalTake("F4:H74", 5, 5)
的自定义公式。在本例中,单元格"K9"返回。 参考:
- 抵消(rowOffset columnOffset)
- offset(rowOffset, columnnoffset, numRows, numColumns)
- 例如,当您使用此方法时,您还可以通过提供坐标和长度来检索值。