以编程方式在 Google 表格中插入公式

Posted

技术标签:

【中文标题】以编程方式在 Google 表格中插入公式【英文标题】:Insert formula in a Google Sheets programmatically 【发布时间】:2015-09-09 14:02:41 【问题描述】:

我需要将公式放入添加到 Google 表格的每个新行的单元格中。我有这个在 VBA 中工作,但无法在脚本中正确构建它。 我循环遍历 i 行直到 lastrow。在单元格 J 中,我想插入这个公式:

var Discount = '=IF(ISBLANK("F"+i,,IF(ISNUMBER(FIND("CM","B"+i)),IF("C"+i>"F"+i,150,0),0))';

我使用这种方法添加行:

var dtaCollect = ["","",StartDate,CustomerName,Monthly,"",Discount,LateFee,TotalPaid,Commission,Note,Referral];
    target_sheet.appendRow(dtaCollect);
    i++;
     else 
      i++;
      
    

但是,公式的写法与上面完全一样,没有用迭代值替换i。结果,我在单元格中得到#ERROR!。我试过INDIRECTconcat

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

i 没有被替换到您的字符串中,因为它只是文本。您需要将其从字符串中分离出来,并在使用引号时更加小心,以确保最终得到一个可行的公式。这会起作用:

var Discount = '=IF(ISBLANK(F'+i+',,IF(ISNUMBER(FIND("CM",B'+i+')),IF(C'+i+'>F'+i+',150,0),0))';

由于您使用的是 A1Notation,因此您只需要一个简单的 javascript String.replace() 即可提供更具可读性的解决方案:

var Discount = '=IF(ISBLANK(F%row%,,IF(ISNUMBER(FIND("CM",B%row%)),IF(C%row%>F%row%,150,0),0))'
               .replace(/%row%/g, i.toString());

解释:

replace() 将查找正则表达式或子字符串匹配项,并将它们替换为新的子字符串。 在这种情况下,我们正在寻找一个正则表达式; g 标志意味着我们将查找所有出现的“%row%”并将它们替换为 i 的值。 我们使用% 作为书挡,以使可替换的文本清晰突出 - 只是一种约定,而不是要求。

注意:你没有展示你如何使用INDIRECT,只是提到你尝试过。它是这里的替代方法,并且可能是首选,因为您可以简单地从现有单元格中复制公式,而无需担心调整引用。

【讨论】:

以上是关于以编程方式在 Google 表格中插入公式的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式打印电子表格中的单元格和注释内容

Google 表格中的 IFS 公式

如何使用公式在单元格文本中间创建超链接?

检索 Google 表格公式的行号

新的Google表格:以编程方式将文字换行设置为Clip

自动填充公式(跨电子表格运行) - Google 表格/应用程序脚本