2015-09-09 158 views
0

我需要将公式添加到添加到Google表格的每个新行中的单元格中。我在VBA中工作,但无法在脚本中正确构建它。 我循环i行直到lastrow。在细胞J,I希望此式插入:以编程方式在Google表格中插入公式

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,只提到你试过了。这是另一种选择,可能是首选,因为您可以简单地从现有单元复制公式,而不用担心调整引用。

+0

像一个魅力工作...非常感谢你 –