以编程方式在 Google 工作表中插入公式
Insert formula in a Google Sheets programmatically
我需要将公式放入添加到 Google 工作表的每个新行的单元格中。我可以在 VBA 中使用它,但无法在脚本中正确构建它。
我循环遍历 i 行直到最后一行。在单元格 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!
。我试过 INDIRECT
和 concat
。
我该如何解决这个问题?
值 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 工作表的每个新行的单元格中。我可以在 VBA 中使用它,但无法在脚本中正确构建它。 我循环遍历 i 行直到最后一行。在单元格 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!
。我试过 INDIRECT
和 concat
。
我该如何解决这个问题?
值 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
,只是说你试过了。它是此处的替代方案,并且可能是首选,因为您可以简单地从现有单元格复制公式而无需担心调整引用。