合并 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) (