setFormulaR1C1()在所有情况下都不会转换为A1表示法......?

时间:2015-04-25 20:32:29

标签: google-apps-script google-sheets

我正在尝试使用相对R1C1表示法编写一个在单元格中设置公式的函数,因为我不知道单元格将具有哪个行号。我已成功使用了cell.setFormulaR1C1(string)两次,但在第三种情况下我不确定什么不起作用。

当我将此字符串传递给应用于单元格H34的setFormulaR1C1()

"=R[0]C[-4]*VALUE(IFERROR(REGEXEXTRACT(INDEX(CSE!I:I;MATCH(R[0]C[-6];CSE!A:A;0);1);\"[0-9]+\");\"0\"))" ;

应该吐出来

=D34*VALUE(IFERROR(REGEXEXTRACT(INDEX(CSE!I:I,MATCH(A34,CSE!A:A,0),1),"[0-9]+"),"0"))

...对吧?但相反,它没有将字符串转换为A1表示法,我收到一个解析错误。反斜杠

在其他地方,我使用非常相似的公式取得了成功...

paymentDueFormulaCell.setFormulaR1C1("=R[0]C[-3]-R[0]C[-2]-R[0]C[-1]");

,当设置到单元格J34时,正确呈现为

=G34-H34-I34

任何人都可以听到我可能遗失的差异吗?

3 个答案:

答案 0 :(得分:1)

简短回答

检查电子表格中是否存在CSE表,并且您的代码使用正确的参数分隔符。

解释

我创建了一个简单的函数来测试OP提供的公式。它起初并没有起作用,但后来我意识到我的电子表格没有名为CSE的表格。添加之后,下面的代码工作正常。

function myFunction() {
  var ss = SpreadsheetApp.getActive();
  var range = ss.getRange('H34');
  var formula = '=R[0]C[-4]*VALUE(IFERROR(REGEXEXTRACT(INDEX(CSE!I:I,MATCH(R[0]C[-6],CSE!A:A,0),1),"[0-9]"),"0"))';
  range.setFormulaR1C1(formula);
}

说明:

  1. 我用撇号替换了外部引号,删除了内部引号的字迹。
  2. 我用逗号替换了分号,因为后者对应于我的电子表格中的默认区域设置。
  3. 注意:在发布版本1之后,我发现代码公式使用分号作为公式参数分隔符,但稍后几行,当显示预期结果时,公式使用逗号而不是分号。 .setFormulaR1C1(formula)要求将适当的公式作为参数传递,以便转换R1C1样式引用。

答案 1 :(得分:1)

我遇到过类似的情况。看来您无法将R1C1表示法与A1表示法结合使用。假设您要坚持使用R1C1,则应将INDEX参考从CSE!I:I更改为CSE!C9:C9

答案 2 :(得分:0)

您是否尝试过使用间接公式?它将任何字符串转换为单元格引用。

=间接("某些字符串"&"某些字符串")

例如:

=间接(" A"&" 1")将被解释为单元格A1