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

乔恩·N

我需要在添加到Google表格的每个新行的单元格中添加一个公式。我在VBA中有此功能,但无法在Script中正确构建它。我遍历我的行直到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

我怎样才能解决这个问题?

莫格斯达

该值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() 会找到regexp或子字符串匹配项,并用新的子字符串替换它们。
  • 在这种情况下,我们正在寻找一个正则表达式;g标志意味着我们将寻找的“所有事件%row%”,并与值替换它们i
  • 我们使用%as作为书挡,以使可替换的文本清晰可见-只是一个约定,而不是一项要求。

注意:您没有显示使用方法INDIRECT,仅提及您尝试过。这是一种替代方法,可能是首选方法,因为您可以简单地从现有单元格中复制公式,而不必担心调整引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章