如何传递行和列而不是自定义Google表格功能中的值?

时间:2019-01-21 21:22:03

标签: google-apps-script google-sheets

function calculateIntervall(note) {//The passing argument gives me the value of the cell with the note, NOT the column or row of particularly this cell
  var spreadsheet = SpreadsheetApp.getActive();
  var col = spreadsheet.getActiveCell().getColumn();//get the column of note anyhow?
  var row = spreadsheet.getActiveCell().getRow();//get the row of note anyhow?
  note = spreadsheet.getCurrentCell().offset(row, col).activate().getNote();//get the value of the note
  return col + row;
};

这只是一个示例程序,可以最好地解释我的问题。当前程序返回活动单元格(具有功能的单元格)的行和列的总和。但是我需要带注释的单元格参数的总和。

我只想让行和列像这样(使用标准函数):

=ROW(note)
=COLUMN(note)

函数通常如下所示:

=ROW(A5) -> this returns 5
=COLUMN(C2) -> this returns 3

1 个答案:

答案 0 :(得分:0)

自定义函数的typeof()参数有所不同。例如:

function custom_function(p) {
    return typeof(p);
}

=custom_function(A1:A1)   // returns "number" or "string" depending upon value is in the single cell A1.
=custom_function(B1:B2)   // returns "object" - a 2 dimenstional array representing the values in the cells in the range.
=custom_function("C1:C1") // returns "string" - representing "C1:C1"

如上所示,您可以传入一个表示范围的字符串,然后可以根据需要在函数中进行处理:

function custom_function(cell) {
    if(!cell.map && (typeof(cell === "string"))) { // not an array or a number 
       var range = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(cell);
       var column = range.getColumn();
       var row = range.getRow();
       return "c: "+column+" r: "+row;
    }
    else {
      return "Invalid Parameter";
    }
}

https://webapps.stackexchange.com/questions/10629/how-to-pass-a-range-into-a-custom-function-in-google-spreadsheets

上有关于将范围值传递到自定义函数的更全面的讨论。

包括以下问题的解决方案:如果将范围引用作为字符串传递,则无法复制包含=custom_function("C1:C1")的单元格并自动更新单元格引用。

更新以解决注释:下面显示了一种非常简单的方法,可以使用自动更新的单元格引用来复制自定义函数。

=custom_function(A1:C3; ROW(A1); COLUMN(A1); ROW(C3); COLUMN(C3))

因此,在实际的GAS脚本函数中,现在有5个参数:parameter-1是单元格值的二维数组,p2和p3是数组左上角的行和列,p4和p5是数组右下角的行和列。

或者,如果您实际上并不关心这些值,或者很乐意使用坐标简单地在自定义函数中重新创建范围,则:

=custom_function(ROW(A1); COLUMN(A1); ROW(C3); COLUMN(C3))