目前我的功能如下:
function myFunction(value1, value2, value3, value4, value5, value6)
基本上,value1始终在A列中,但在行之间切换。 value2-6总是在彼此的右边1个单元格。即,value1 = A1,表示value2 = B1,value3 = B3等。或者value3 = A5,value2 = B5等。
我基本上只想让我的输入成为第一列,我的程序知道读取2-6的值,如下所示:
myFunction(value1)
我怎样才能做到这一点?
答案 0 :(得分:0)
以下内容应该非常明确和有效。至少它正在发挥作用。 请注意,特别是对于这样的简单模式(行中的所有单元格),您应首先定义范围,然后在数组中一次选取值。一次挑选一个单元格的值明显变慢。
function myFunction( value1 )
{
var cell1 = SpreadsheetApp.getActiveSheet().getRange(value1);
// myFunction("A1") is the same as following:
//cell1 = SpreadsheetApp.getActiveSheet().getRange("A1");
// Define the value here, if it is fixed.
//Otherwise in the function parameters
var columnCount = 6;
// Define the range to get the values from. Parameters:
// Starting row of the range : row of Cell1
// Starting column of the range : column of cell1
// Number of rows = 1
// And the number of columns we wanted
var values = SpreadsheetApp.getActiveSheet()
.getRange( cell1.getRow() , cell1.getColumn() , 1 , columnCount)
.getValues();
// var values == [[ value, value, value, value, value, value ]]
// so actually values[0] is what you requested, the values from A1 to F1
// Now if you want to, for example sum up the values
// You just iterate through the values[0]
var sum = Number(0);
for ( var i = 0; i < values[0].length; i++ )
{
var cellValue = values[0][i];
sum += Number(cellValue);
}
return sum;
}
请记住,当您在电子表格单元格中调用该函数时,您无法通过单击一个单元格来添加该参数,因为它将导致:= myFunction(A1) - A1添加的方式使用单元格A1的VALUE作为参数。
调用函数时需要添加引号,如下所示: = myFunction的(&#34; A1&#34) - 这样就可以使用单元格作为参数。
答案 1 :(得分:0)
我猜测value1
不是一个小区范围,因为谷歌内置Spreadsheet Service已经getRange(row, column)提供了getRange().getA1Notation(),其他人提供了Range类。
听起来您希望脚本在column A
搜索argument value1
并返回找到的行数据?
function getValueRow (value1) {
var sh = SpreadsheetApp.getActive().getSheets()[1];
// Get each cell value in column "A" and flatten for indexOf() use
var bound_col = sh.getRange(1, 1, sh.getLastRow()).getValues().join().split(",");
// Compare value1 to column "A" data to find its row
// `indexOf()` returns the index of the first match
var argument_row = bound_col.indexOf(value1);
if (argument_row != -1) {
// Get the row data of value1 from column "A" to column "F"
var row_data = sh.getRange((argument_row + 1), 1, 1, 6).getValues();
Logger.log("%s is in row %s", value1, (argument_row + 1));
Logger.log("The row_data is: %s", row_data);
} else {
Logger.log("Can not find %s in column A", value1);
}
}