处理Google表格中的单个单元格

时间:2018-06-19 18:49:21

标签: google-apps-script google-sheets cell formula custom-function

不确定是否可以完成,但这是问题所在。我有一个包含多个工作表的工作表应用程序。表格1包含以下数据:

字符串描述符|值1 |值2

表2是有效公式。在此示例中,单元格D37引用了“ Sheet1”!A14

在工作表2的E栏,我想引用回“ Sheet1”!A16

如果我传递字符串值“ D37”,则可以找到该单元格,然后进行处理并返回正确的数据。但是,当我尝试获取该函数传递的单元格地址时,遇到“找不到范围”错误,我无法正常工作。

第2页参考是'= INDIRECT(myFunction(D37))

function myFunction(piNameCell) { //piNameCell has the reference to D37

  var ss = SpreadsheetApp;
  var sheet = ss.getActiveSheet().getRange(piNameCell);  // Like this it crashes
  //var sheet = ss.getActiveSheet().getRange("D37");       //This works
  var sheetRef = sheet.getFormula();

  //remove the leading '=' sign
  sheetRef = sheetRef.substring(1);

  //find the !
  var bangIndex = sheetRef.indexOf("!");

  //change the column to 'E'
 sheetRef = sheetRef.substring(0,bangIndex+1) + "E" + sheetRef.substring(bangIndex+2)

  return sheetRef;
}

1 个答案:

答案 0 :(得分:0)

就像您在问题中所说的那样,您需要发送单元格的地址,而不是内容的地址,但是您不想将其作为字符串发送,因为您希望在移动公式时更改它。您有一些选择。

获取单元格坐标

您只需使用ROWCOLUMN函数即可获取单元格坐标。
您必须稍微更改一下函数才能使用坐标。您的函数调用可能如下所示:

=INDIRECT(myFunction(ROW(D37), COLUMN(D37)));

然后在您的函数中更改参数和getRange函数。

使用单元格坐标获取A1表示法

如果您确实要发送A1表示法,则可以使用ADDRESS进行。

=INDIRECT(myFunction(ADRESS(ROW(D37), COLUMN(D37))));