如何使用1输入获取同一行中的单元格值?

时间:2017-10-16 18:10:12

标签: google-apps-script

目前我的功能如下:

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) 

我怎样才能做到这一点?

2 个答案:

答案 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);
  }
}