目前,我的函数如下所示:
function myFunction(value1, value2, value3, value4, value5, value6)
基本上,value1始终在A列中,但在行之间移动。值2-6始终是彼此右侧的1个单元格。例如,value1=A1,意思是value2=B1、value3=B3等或value3=A5、value2=B5等。
我基本上只希望我的输入是第一列,并且我的程序知道读取2-6的值,如下所示:
myFunction(value1)
我怎样才能做到这一点呢?
发布于 2017-10-17 03:09:26
下面的内容应该是非常清晰和有效的。至少它是有效的。请注意,特别是对于像这样的简单模式(一行中的所有单元格),您应该首先定义范围,然后在数组中一次选取这些值。一次选取一个单元格的值明显要慢得多。
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 add将使用单元格A1的值作为参数。
在调用函数时需要添加引号,就像这样:=myFunction("A1") -That使用单元格作为参数的方式。
发布于 2017-10-17 08:05:33
我猜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);
}
}
https://stackoverflow.com/questions/46776550
复制相似问题