合并 AdWords 脚本
Consolidate AdWords Script
我在用于 Google AdWords 的脚本中包含以下代码,它运行良好,但我希望可以通过某种方式轻松地缩短或合并它。它目前正在运行,但是几乎是脚本 运行 时间的两倍,并且在将来(如果需要)进行更改和扩展不是很容易。如果您需要任何其他信息,请告诉我您将如何执行此操作!
//projections by Campaign row 22
sheet.getRange("E10").setValue("=A22");
sheet.getRange("E11").setValue("=H22");
sheet.getRange("E12").setValue("=J22");
sheet.getRange("E13").setValue("=Round(E11/E12)");
sheet.getRange("E14").setValue("=B22");
sheet.getRange("E15").setValue("=D22");
sheet.getRange("E17").setValue("=sum((G22/E3)*100)");
sheet.getRange("E18").setValue("=E11-E3");
sheet.getRange("E19").setValue("=ROUND(E18/B6)");
//projections by Campaign row 23
sheet.getRange("F10").setValue("=A23");
sheet.getRange("F11").setValue("=H23");
sheet.getRange("F12").setValue("=J23");
sheet.getRange("F13").setValue("=Round(F11/F12)");
sheet.getRange("F14").setValue("=B23");
sheet.getRange("F15").setValue("=D23");
sheet.getRange("F17").setValue("=sum((G23/F3)*100)");
sheet.getRange("F18").setValue("=F11-F3");
sheet.getRange("F19").setValue("=ROUND(F18/B6)");
//projections by Campaign row 24
sheet.getRange("G10").setValue("=A24");
sheet.getRange("G11").setValue("=H24");
sheet.getRange("G12").setValue("=J24");
sheet.getRange("G13").setValue("=Round(G11/G12)");
sheet.getRange("G14").setValue("=B24");
sheet.getRange("G15").setValue("=D24");
sheet.getRange("G17").setValue("=sum((G24/G3)*100)");
sheet.getRange("G18").setValue("=G11-G3");
sheet.getRange("G19").setValue("=ROUND(G18/B6)");
//projections by Campaign row 25
sheet.getRange("H10").setValue("=A25");
sheet.getRange("H11").setValue("=H25");
sheet.getRange("H12").setValue("=J25");
sheet.getRange("H13").setValue("=Round(H11/H12)");
sheet.getRange("H14").setValue("=B25");
sheet.getRange("H15").setValue("=D25");
sheet.getRange("H17").setValue("=sum((G25/H3)*100)");
sheet.getRange("H18").setValue("=H11-H3");
sheet.getRange("H19").setValue("=ROUND(H18/B6)");
//projections by Campaign row 26
sheet.getRange("I10").setValue("=A26");
sheet.getRange("I11").setValue("=H26");
sheet.getRange("I12").setValue("=J26");
sheet.getRange("I13").setValue("=Round(I11/I12)");
sheet.getRange("I14").setValue("=B26");
sheet.getRange("I15").setValue("=D26");
sheet.getRange("I17").setValue("=sum((G26/I3)*100)");
sheet.getRange("I18").setValue("=I11-I3");
sheet.getRange("I19").setValue("=ROUND(I18/B6)");
//projections by Campaign row 27
sheet.getRange("J10").setValue("=A27");
sheet.getRange("J11").setValue("=H27");
sheet.getRange("J12").setValue("=J27");
sheet.getRange("J13").setValue("=Round(J11/J12)");
sheet.getRange("J14").setValue("=B27");
sheet.getRange("J15").setValue("=D27");
sheet.getRange("J17").setValue("=sum((G27/J3)*100)");
sheet.getRange("J18").setValue("=J11-J3");
sheet.getRange("J19").setValue("=ROUND(J18/B6)");
//projections by Campaign row 28
sheet.getRange("K10").setValue("=A28");
sheet.getRange("K11").setValue("=H28");
sheet.getRange("K12").setValue("=J28");
sheet.getRange("K13").setValue("=Round(K11/K12)");
sheet.getRange("K14").setValue("=B28");
sheet.getRange("K15").setValue("=D28");
sheet.getRange("K17").setValue("=sum((G28/K3)*100)");
sheet.getRange("K18").setValue("=K11-K3");
sheet.getRange("K19").setValue("=ROUND(K18/B6)");
//projections by Campaign row 29
sheet.getRange("L10").setValue("=A29");
sheet.getRange("L11").setValue("=H29");
sheet.getRange("L12").setValue("=J29");
sheet.getRange("L13").setValue("=Round(L11/L12)");
sheet.getRange("L14").setValue("=B29");
sheet.getRange("L15").setValue("=D29");
sheet.getRange("L17").setValue("=sum((G29/L3)*100)");
sheet.getRange("L18").setValue("=L11-L3");
sheet.getRange("L19").setValue("=ROUND(L18/B6)");
//projections by Campaign row 30
sheet.getRange("M10").setValue("=A30");
sheet.getRange("M11").setValue("=H30");
sheet.getRange("M12").setValue("=J30");
sheet.getRange("M13").setValue("=Round(M11/M12)");
sheet.getRange("M14").setValue("=B30");
sheet.getRange("M15").setValue("=D30");
sheet.getRange("M17").setValue("=sum((G30/M3)*100)");
sheet.getRange("M18").setValue("=M11-M3");
sheet.getRange("M19").setValue("=ROUND(M18/B6)");
//projections by Campaign row 30
sheet.getRange("N10").setValue("=A31");
sheet.getRange("N11").setValue("=H31");
sheet.getRange("N12").setValue("=J31");
sheet.getRange("N13").setValue("=Round(N11/N12)");
sheet.getRange("N14").setValue("=B31");
sheet.getRange("N15").setValue("=D31");
sheet.getRange("N17").setValue("=sum((G31/N3)*100)");
sheet.getRange("N18").setValue("=N11-N3");
sheet.getRange("N19").setValue("=ROUND(N18/B6)");
您可以使用以下代码来减少代码行数。
var range = "E";
while(range < "N"){
var num =22;
for(var i=10;i<20;i++){
if(i==10){
sheet.getRange(range+i).setValue("=A"+num);
}
else if(i==11){
sheet.getRange(range+i).setValue("=H"+num);
}
else if(i==12){
sheet.getRange(range+i).setValue("=J"+num);
}
else if(i==13){
sheet.getRange(range+i).setValue("=Round(range+11/range+12)");
}
else if(i==14){
sheet.getRange(range+i).setValue("=B"+num);
}
else if(i==15){
sheet.getRange(range+i).setValue("=D"+num);
}
else if(i==17){
sheet.getRange(range+i).setValue("=sum(("+range+""+num+"/"+range+"3)*100)");
}
else if(i==18){
sheet.getRange(range+i).setValue("="+range+"11-"+range+"3");
}
else if(i==19){
sheet.getRange(range+i).setValue("=ROUND("+range+"18/"+range+"6)");
}
else{
continue;
}
}
range = nextChar(range);
}
function nextChar(c){
return String.fromCharCode(c.charCodeAt()+1);
}
这应该可以解决您的问题。
或者,您可以使用 switch().
您似乎使用了错误的表示法:到目前为止,您想插入 FORMULA 而不是 VALUE。查看 Spreadsheet Class and Range Class 文档。
这是您要查找的内容:
- setFormula(公式):更新此范围的公式。
- setFormulaR1C1(formula):更新此范围的公式。
- setFormulas(formulas):设置公式的矩形网格(必须匹配此范围的尺寸)。
- setFormulasR1C1(formulas):设置公式的矩形网格(必须匹配此范围的尺寸)。
例如
sheet.getRange("E10").setValue("=A22");
sheet.getRange("E11").setValue("=H22");
sheet.getRange("E12").setValue("=J22");
sheet.getRange("E13").setValue("=Round(E11/E12)");
sheet.getRange("E14").setValue("=B22");
sheet.getRange("E15").setValue("=D22");
sheet.getRange("E17").setValue("=sum((G22/E3)*100)");
sheet.getRange("E18").setValue("=E11-E3");
sheet.getRange("E19").setValue("=ROUND(E18/B6)");
可能会变成
var Formulas = [
"=A22","=H22","=J22"
"=Round(E11/E12)",
"=B22","=D22",
"=Sum((G22/E3)*100)",
"=E11-E3",
"=ROUND(E18/B6)"
]
sheet.getRange("E10:E19").setFormulasR1C1(Formulas);
//not sure about the A1 notation if that would accept this parameters else
//replace by getRange(10,5,19,5) (
我在用于 Google AdWords 的脚本中包含以下代码,它运行良好,但我希望可以通过某种方式轻松地缩短或合并它。它目前正在运行,但是几乎是脚本 运行 时间的两倍,并且在将来(如果需要)进行更改和扩展不是很容易。如果您需要任何其他信息,请告诉我您将如何执行此操作!
//projections by Campaign row 22
sheet.getRange("E10").setValue("=A22");
sheet.getRange("E11").setValue("=H22");
sheet.getRange("E12").setValue("=J22");
sheet.getRange("E13").setValue("=Round(E11/E12)");
sheet.getRange("E14").setValue("=B22");
sheet.getRange("E15").setValue("=D22");
sheet.getRange("E17").setValue("=sum((G22/E3)*100)");
sheet.getRange("E18").setValue("=E11-E3");
sheet.getRange("E19").setValue("=ROUND(E18/B6)");
//projections by Campaign row 23
sheet.getRange("F10").setValue("=A23");
sheet.getRange("F11").setValue("=H23");
sheet.getRange("F12").setValue("=J23");
sheet.getRange("F13").setValue("=Round(F11/F12)");
sheet.getRange("F14").setValue("=B23");
sheet.getRange("F15").setValue("=D23");
sheet.getRange("F17").setValue("=sum((G23/F3)*100)");
sheet.getRange("F18").setValue("=F11-F3");
sheet.getRange("F19").setValue("=ROUND(F18/B6)");
//projections by Campaign row 24
sheet.getRange("G10").setValue("=A24");
sheet.getRange("G11").setValue("=H24");
sheet.getRange("G12").setValue("=J24");
sheet.getRange("G13").setValue("=Round(G11/G12)");
sheet.getRange("G14").setValue("=B24");
sheet.getRange("G15").setValue("=D24");
sheet.getRange("G17").setValue("=sum((G24/G3)*100)");
sheet.getRange("G18").setValue("=G11-G3");
sheet.getRange("G19").setValue("=ROUND(G18/B6)");
//projections by Campaign row 25
sheet.getRange("H10").setValue("=A25");
sheet.getRange("H11").setValue("=H25");
sheet.getRange("H12").setValue("=J25");
sheet.getRange("H13").setValue("=Round(H11/H12)");
sheet.getRange("H14").setValue("=B25");
sheet.getRange("H15").setValue("=D25");
sheet.getRange("H17").setValue("=sum((G25/H3)*100)");
sheet.getRange("H18").setValue("=H11-H3");
sheet.getRange("H19").setValue("=ROUND(H18/B6)");
//projections by Campaign row 26
sheet.getRange("I10").setValue("=A26");
sheet.getRange("I11").setValue("=H26");
sheet.getRange("I12").setValue("=J26");
sheet.getRange("I13").setValue("=Round(I11/I12)");
sheet.getRange("I14").setValue("=B26");
sheet.getRange("I15").setValue("=D26");
sheet.getRange("I17").setValue("=sum((G26/I3)*100)");
sheet.getRange("I18").setValue("=I11-I3");
sheet.getRange("I19").setValue("=ROUND(I18/B6)");
//projections by Campaign row 27
sheet.getRange("J10").setValue("=A27");
sheet.getRange("J11").setValue("=H27");
sheet.getRange("J12").setValue("=J27");
sheet.getRange("J13").setValue("=Round(J11/J12)");
sheet.getRange("J14").setValue("=B27");
sheet.getRange("J15").setValue("=D27");
sheet.getRange("J17").setValue("=sum((G27/J3)*100)");
sheet.getRange("J18").setValue("=J11-J3");
sheet.getRange("J19").setValue("=ROUND(J18/B6)");
//projections by Campaign row 28
sheet.getRange("K10").setValue("=A28");
sheet.getRange("K11").setValue("=H28");
sheet.getRange("K12").setValue("=J28");
sheet.getRange("K13").setValue("=Round(K11/K12)");
sheet.getRange("K14").setValue("=B28");
sheet.getRange("K15").setValue("=D28");
sheet.getRange("K17").setValue("=sum((G28/K3)*100)");
sheet.getRange("K18").setValue("=K11-K3");
sheet.getRange("K19").setValue("=ROUND(K18/B6)");
//projections by Campaign row 29
sheet.getRange("L10").setValue("=A29");
sheet.getRange("L11").setValue("=H29");
sheet.getRange("L12").setValue("=J29");
sheet.getRange("L13").setValue("=Round(L11/L12)");
sheet.getRange("L14").setValue("=B29");
sheet.getRange("L15").setValue("=D29");
sheet.getRange("L17").setValue("=sum((G29/L3)*100)");
sheet.getRange("L18").setValue("=L11-L3");
sheet.getRange("L19").setValue("=ROUND(L18/B6)");
//projections by Campaign row 30
sheet.getRange("M10").setValue("=A30");
sheet.getRange("M11").setValue("=H30");
sheet.getRange("M12").setValue("=J30");
sheet.getRange("M13").setValue("=Round(M11/M12)");
sheet.getRange("M14").setValue("=B30");
sheet.getRange("M15").setValue("=D30");
sheet.getRange("M17").setValue("=sum((G30/M3)*100)");
sheet.getRange("M18").setValue("=M11-M3");
sheet.getRange("M19").setValue("=ROUND(M18/B6)");
//projections by Campaign row 30
sheet.getRange("N10").setValue("=A31");
sheet.getRange("N11").setValue("=H31");
sheet.getRange("N12").setValue("=J31");
sheet.getRange("N13").setValue("=Round(N11/N12)");
sheet.getRange("N14").setValue("=B31");
sheet.getRange("N15").setValue("=D31");
sheet.getRange("N17").setValue("=sum((G31/N3)*100)");
sheet.getRange("N18").setValue("=N11-N3");
sheet.getRange("N19").setValue("=ROUND(N18/B6)");
您可以使用以下代码来减少代码行数。
var range = "E";
while(range < "N"){
var num =22;
for(var i=10;i<20;i++){
if(i==10){
sheet.getRange(range+i).setValue("=A"+num);
}
else if(i==11){
sheet.getRange(range+i).setValue("=H"+num);
}
else if(i==12){
sheet.getRange(range+i).setValue("=J"+num);
}
else if(i==13){
sheet.getRange(range+i).setValue("=Round(range+11/range+12)");
}
else if(i==14){
sheet.getRange(range+i).setValue("=B"+num);
}
else if(i==15){
sheet.getRange(range+i).setValue("=D"+num);
}
else if(i==17){
sheet.getRange(range+i).setValue("=sum(("+range+""+num+"/"+range+"3)*100)");
}
else if(i==18){
sheet.getRange(range+i).setValue("="+range+"11-"+range+"3");
}
else if(i==19){
sheet.getRange(range+i).setValue("=ROUND("+range+"18/"+range+"6)");
}
else{
continue;
}
}
range = nextChar(range);
}
function nextChar(c){
return String.fromCharCode(c.charCodeAt()+1);
}
这应该可以解决您的问题。 或者,您可以使用 switch().
您似乎使用了错误的表示法:到目前为止,您想插入 FORMULA 而不是 VALUE。查看 Spreadsheet Class and Range Class 文档。
这是您要查找的内容:
- setFormula(公式):更新此范围的公式。
- setFormulaR1C1(formula):更新此范围的公式。
- setFormulas(formulas):设置公式的矩形网格(必须匹配此范围的尺寸)。
- setFormulasR1C1(formulas):设置公式的矩形网格(必须匹配此范围的尺寸)。
例如
sheet.getRange("E10").setValue("=A22");
sheet.getRange("E11").setValue("=H22");
sheet.getRange("E12").setValue("=J22");
sheet.getRange("E13").setValue("=Round(E11/E12)");
sheet.getRange("E14").setValue("=B22");
sheet.getRange("E15").setValue("=D22");
sheet.getRange("E17").setValue("=sum((G22/E3)*100)");
sheet.getRange("E18").setValue("=E11-E3");
sheet.getRange("E19").setValue("=ROUND(E18/B6)");
可能会变成
var Formulas = [
"=A22","=H22","=J22"
"=Round(E11/E12)",
"=B22","=D22",
"=Sum((G22/E3)*100)",
"=E11-E3",
"=ROUND(E18/B6)"
]
sheet.getRange("E10:E19").setFormulasR1C1(Formulas);
//not sure about the A1 notation if that would accept this parameters else
//replace by getRange(10,5,19,5) (