Search code examples
javascriptgoogle-ads-apiconsolidation

Consolidate AdWords Script


I have the below code in a script I am using for Google AdWords and it is working well however was hoping that it could be shortened or consolidated in some way easily. It is currently working however has nearly double the script run time and is not very easy for changes and expansion in the future (if needed). Please let me know how you would do this or if you need any other information!

//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)");

Solution

  • It seems that you are using the wrong notation: you want to insert FORMULA and not VALUE so far. Check the Spreadsheet Class and Range Class docs.

    Here is what you are looking for:

    • setFormula(formula): Updates the formula for this range.
    • setFormulaR1C1(formula): Updates the formula for this range.
    • setFormulas(formulas): Sets a rectangular grid of formulas (must match dimensions of this range).
    • setFormulasR1C1(formulas): Sets a rectangular grid of formulas (must match dimensions of this range).

    So for example

    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)");
    

    could become

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