<?php
/*************************************************
* Weekly Reporting
* @version: 3.4
***************************************************/
echo "heelo";
die();
var ONLY_ACTIVE = false;
var summaryHeader = ['Campaign Type','Clicks','Impr.','CTR','Avg. CPC ','Cost ',
'Avg. Pos.','Conversions','Click assisted conv.','Cost / conv. ',
'Conv. Rate','Total conv. value ','Click assisted conv. value','Conv. value / cost'];
var reportHeader = ['Campaign','Budget','Clicks','Impr.','CTR','Avg. CPC ','Cost ',
'Avg. Pos.','Conversions','Click assisted conv.','Cost / conv. ',
'Conv. Rate','Total conv. value ','Click assisted conv. value','Conv. value / cost'];
var shoppingReportHead = ['Product group','Clicks','Impressions','CTR','Avg. CPC',' Cost','Conversions',
'Cost / converted click','Conversion rate','Total conv. value','Conv. value / cost'];
var SEND_EMAIL = true;
function main() {
var today = getAdWordsFormattedDate(0, 'MM-dd-yyyy');
var spreadsheet = SpreadsheetApp.create(AdWordsApp.currentAccount().getName() + ': Account Report ' + today);
Logger.log('Report Url: ' + spreadsheet.getUrl());
try {
spreadsheet.addEditors(TO);
spreadsheet.addEditors(CC);
} catch(e) {
Logger.log(e);
}
var reportSheet = spreadsheet.getSheets()[0];
reportSheet.setName('Account Report');
var shoppingSheet = spreadsheet.insertSheet('Google Shopping');
var networkSheet = spreadsheet.insertSheet('Summary');
compileNetworkReport(networkSheet);
compileAccountReport(reportSheet);
compileShoppingReport(shoppingSheet);
if(!SEND_EMAIL) { return; }
var MSG = 'Hey,\n\nWeekly Account Report for you Adwords Account ('+AdWordsApp.currentAccount().getName()+') has been compiled at below url:\n'+spreadsheet.getUrl();
var SUB = AdWordsApp.currentAccount().getName() + ': Weekly Account Report ' + today;
if(CC.length) {
MailApp.sendEmail(TO.join(','), SUB, MSG, {cc:CC.join(',') });
} else {
MailApp.sendEmail(TO.join(','), SUB, MSG, {cc:CC.join(',') });
}
}
function compileShoppingReport(sheet){
sheet.getRange(1,1,1,1).setValue('This lists all Product Groups from ALL Google Shopping Ad Groups.');
sheet.getRange(1,1,1,shoppingReportHead.length).merge().setHorizontalAlignment('center').setBackground('#ffffcc').setFontWeight('bold').setFontSize(11);
sheet.getRange(2,1,1,1).setValue('Google Shopping');
sheet.getRange(2,1,1,shoppingReportHead.length).merge().setHorizontalAlignment('center').setFontColor('#1f497d').setFontWeight('bold').setFontSize(14);
var row = sheet.getLastRow()+1;
getShoppingStats(8, 2, sheet, row);
var row = sheet.getLastRow()+2;
getShoppingStats(15, 9, sheet, row);
var row = sheet.getLastRow()+2;
getShoppingStats(22, 16, sheet, row);
var row = sheet.getLastRow()+2;
getShoppingStats(29, 23, sheet, row);
sheet.setFrozenRows(2);
//Format Rows
var numRows = sheet.getDataRange().getNumRows();
sheet.getRange(2, 2, numRows, 1).setNumberFormat("#,##0"); // Clicks
sheet.getRange(2, 3, numRows, 1).setNumberFormat("#,##0"); // Impressions
sheet.getRange(2, 4, numRows, 1).setNumberFormat("0.00%"); // Ctr
sheet.getRange(2, 5, numRows, 1).setNumberFormat("$#,##0.00"); // Cpc
sheet.getRange(2, 6, numRows, 1).setNumberFormat("$#,##0.00"); // Cost
sheet.getRange(2, 7, numRows, 1).setNumberFormat("#,##0"); // Conversions
sheet.getRange(2, 8, numRows, 1).setNumberFormat("$#,##0.00"); // CPA
sheet.getRange(2, 9, numRows, 1).setNumberFormat("0.00%"); //CR
sheet.getRange(2, 10, numRows, 1).setNumberFormat("$#,##0.00"); // Conv Value
sheet.getRange(2, 11, numRows, 1).setNumberFormat("#,##0.00"); // Conv val / Cost
if((sheet.getMaxColumns() - sheet.getLastColumn()) > 0) {
sheet.deleteColumns(sheet.getLastColumn()+1, sheet.getMaxColumns() - sheet.getLastColumn());
}
if((sheet.getMaxRows() - sheet.getLastRow()) > 0) {
sheet.deleteRows(sheet.getLastRow()+1, sheet.getMaxRows() - sheet.getLastRow());
}
sheet.getDataRange().setFontFamily('Calibri');
}
function compileNetworkReport(reportSheet) {
var today = getAdWordsFormattedDate(0, 'MM-dd-yyyy');
reportSheet.getRange(2,1,1,1).setValue('AdWords Report '+today);
reportSheet.getRange(2,1,1,reportHeader.length).merge().setHorizontalAlignment('center').setFontColor('#1f497d').setFontWeight('bold').setFontSize(14);
reportSheet.getRange(3,1,1,reportHeader.length).merge();
/** 30 Days **/
reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Last 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
var row = reportSheet.getLastRow()+1;
getNetworkStats(31, 2, reportSheet, row);
/** Prior 30 Days **/
reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Prior 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
var row = reportSheet.getLastRow()+1;
getNetworkStats(61, 32, reportSheet, row);
/*** Week over Week **/
reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Week Over Week').setFontColor('#1f497d').setFontWeight('bold').setFontSize(12);
reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
var NUM_WEEKS = 52, START = 8, END = 2
var row = reportSheet.getLastRow()+1;
while(NUM_WEEKS > 0) {
getNetworkStats(START, END, reportSheet, row);
START+=7;
END+=7;
NUM_WEEKS--;
row = reportSheet.getLastRow()+2;
}
reportSheet.setFrozenRows(2);
//Format Rows
var numRows = reportSheet.getDataRange().getNumRows();
reportSheet.getRange(2, 2, numRows, 1).setNumberFormat("#,##0"); // Clicks
reportSheet.getRange(2, 3, numRows, 1).setNumberFormat("#,##0"); // Impressions
reportSheet.getRange(2, 4, numRows, 1).setNumberFormat("0.00%"); // Ctr
reportSheet.getRange(2, 5, numRows, 1).setNumberFormat("$#,##0.00"); // Cpc
reportSheet.getRange(2, 6, numRows, 1).setNumberFormat("$#,##0.00"); // Cost
reportSheet.getRange(2, 7, numRows, 1).setNumberFormat("#,##0.00"); // Avg Pos
reportSheet.getRange(2, 8, numRows, 1).setNumberFormat("#,##0"); // Conversions
reportSheet.getRange(2, 9, numRows, 1).setNumberFormat("#,##0"); // Clicks Asst Conversions
reportSheet.getRange(2, 10, numRows, 1).setNumberFormat("$#,##0.00"); // CPA
reportSheet.getRange(2, 11, numRows, 1).setNumberFormat("0.00%"); //CR
reportSheet.getRange(2, 12, numRows, 1).setNumberFormat("$#,##0.00"); // Conv Value
reportSheet.getRange(2, 13, numRows, 1).setNumberFormat("$#,##0.00"); // Click Asst Conv Value
reportSheet.getRange(2, 14, numRows, 1).setNumberFormat("#,##0.00"); // Conv val / Cost
if((reportSheet.getMaxColumns() - reportSheet.getLastColumn()) > 0) {
reportSheet.deleteColumns(reportSheet.getLastColumn()+1, reportSheet.getMaxColumns() - reportSheet.getLastColumn());
}
if((reportSheet.getMaxRows() - reportSheet.getLastRow()) > 0) {
reportSheet.deleteRows(reportSheet.getLastRow()+1, reportSheet.getMaxRows() - reportSheet.getLastRow());
}
reportSheet.getDataRange().setFontFamily('Calibri');
}
function compileAccountReport(reportSheet) {
var today = getAdWordsFormattedDate(0, 'MM-dd-yyyy');
reportSheet.getRange(2,1,1,1).setValue('AdWords Report '+today);
reportSheet.getRange(2,1,1,reportHeader.length).merge().setHorizontalAlignment('center').setFontColor('#1f497d').setFontWeight('bold').setFontSize(14);
reportSheet.getRange(3,1,1,reportHeader.length).merge();
/** 30 Days **/
reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Last 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
var row = reportSheet.getLastRow()+1;
getCampaignStats(31, 2, reportSheet, row);
/** Prior 30 Days **/
reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Prior 30').setFontColor('#741b47').setFontWeight('bold').setFontSize(12);
reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
var row = reportSheet.getLastRow()+1;
getCampaignStats(61, 32, reportSheet, row);
/*** Week over Week **/
reportSheet.getRange(reportSheet.getLastRow()+2,1,1,1).setValue('Week Over Week').setFontColor('#1f497d').setFontWeight('bold').setFontSize(12);
reportSheet.getRange(reportSheet.getLastRow(),1,1,reportHeader.length).merge();
var NUM_WEEKS = 52, START = 8, END = 2
var row = reportSheet.getLastRow()+1;
while(NUM_WEEKS > 0) {
getCampaignStats(START, END, reportSheet, row);
START+=7;
END+=7;
NUM_WEEKS--;
row = reportSheet.getLastRow()+2;
}
reportSheet.setFrozenRows(2);
//Format Rows
var numRows = reportSheet.getDataRange().getNumRows();
reportSheet.getRange(2, 2, numRows, 1).setNumberFormat("$#,##0.00"); // Budget
reportSheet.getRange(2, 3, numRows, 1).setNumberFormat("#,##0"); // Clicks
reportSheet.getRange(2, 4, numRows, 1).setNumberFormat("#,##0"); // Impressions
reportSheet.getRange(2, 5, numRows, 1).setNumberFormat("0.00%"); // Ctr
reportSheet.getRange(2, 6, numRows, 1).setNumberFormat("$#,##0.00"); // Cpc
reportSheet.getRange(2, 7, numRows, 1).setNumberFormat("$#,##0.00"); // Cost
reportSheet.getRange(2, 8, numRows, 1).setNumberFormat("#,##0.00"); // Avg Pos
reportSheet.getRange(2, 9, numRows, 1).setNumberFormat("#,##0"); // Conversions
reportSheet.getRange(2, 10, numRows, 1).setNumberFormat("#,##0"); // Clicks Asst Conversions
reportSheet.getRange(2, 11, numRows, 1).setNumberFormat("$#,##0.00"); // CPA
reportSheet.getRange(2, 12, numRows, 1).setNumberFormat("0.00%"); //CR
reportSheet.getRange(2, 13, numRows, 1).setNumberFormat("$#,##0.00"); // Conv Value
reportSheet.getRange(2, 14, numRows, 1).setNumberFormat("$#,##0.00"); // Click Asst Conv Value
reportSheet.getRange(2, 15, numRows, 1).setNumberFormat("#,##0.00"); // Conv val / Cost
if((reportSheet.getMaxColumns() - reportSheet.getLastColumn()) > 0) {
reportSheet.deleteColumns(reportSheet.getLastColumn()+1, reportSheet.getMaxColumns() - reportSheet.getLastColumn());
}
if((reportSheet.getMaxRows() - reportSheet.getLastRow()) > 0) {
reportSheet.deleteRows(reportSheet.getLastRow()+1, reportSheet.getMaxRows() - reportSheet.getLastRow());
}
reportSheet.getDataRange().setFontFamily('Calibri');
}
function getShoppingStats(start, end, sheet, rowNum) {
var TO = getAdWordsFormattedDate(end, 'yyyyMMdd');
var FROM = getAdWordsFormattedDate(start, 'yyyyMMdd');
var formattedTO = getAdWordsFormattedDate(end, 'MMM dd, yyyy');
var formattedFROM = getAdWordsFormattedDate(start, 'MMM dd, yyyy');
var dateHead = formattedFROM + ' - ' + formattedTO;
var dateRow = [dateHead];
while(dateRow.length != shoppingReportHead.length) {
dateRow.push('');
}
var OUTPUT = [dateRow,shoppingReportHead];
var OPTIONS = { includeZeroImpressions : false };
var cols = ['CustomAttribute1','Clicks','Impressions','Ctr','AverageCpc','Cost','Conversions',
'CostPerConversion','ConversionRate','ConversionValue'];
var report = 'SHOPPING_PERFORMANCE_REPORT';
var query = ['select',cols.join(','),'from',report,
'during',FROM + ',' + TO].join(' ');
var reportIter = AdWordsApp.report(query, OPTIONS).rows();
while(reportIter.hasNext()){
var row = reportIter.next();
var row_array = [];
for(var k in cols) {
row_array.push(row[cols[k]]);
}
var convValPerCost = (row.Cost == 0) ? 0 : (parseFloat(row.ConversionValue.toString().replace(/,/g, '')) / parseFloat(row.Cost.toString().replace(/,/g, '')));
row_array.push(convValPerCost);
OUTPUT.push(row_array);
}
var totals = ['Total'];
while(totals.length != shoppingReportHead.length) {
totals.push(0);
}
OUTPUT.push(totals);
sheet.getRange(rowNum, 1, OUTPUT.length, OUTPUT[0].length).setValues(OUTPUT).setFontSize(10);
sheet.getRange(rowNum, 1, 1, OUTPUT[0].length).merge().setFontColor('#ffffff').setBackground('#4f81bd');
sheet.getRange(rowNum, 1, 2, OUTPUT[0].length).setFontSize(11);
sheet.getRange(rowNum+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setBackground('#dbe5f1');
var numRows = OUTPUT.length-3;
if(numRows < 1) { numRows = 1; }
sheet.getRange(rowNum+2, 1, numRows, OUTPUT[0].length).sort([{column: 7, ascending: false}, {column: 6, ascending: true}]);
var r = sheet.getLastRow();
var e = r-1;
var s = rowNum + 2;
var formulas = [['=SUM(B'+s+':B'+e+')', '=SUM(C'+s+':C'+e+')', '=B'+r+'/C'+r, '=F'+r+'/B'+r, '=SUM(F'+s+':F'+e+')',
'=SUM(G'+s+':G'+e+')', '=F'+r+'/G'+r, '=G'+r+'/B'+r, '=SUM(J'+s+':J'+e+')', '=J'+r+'/F'+r]];
sheet.getRange(r, 2, 1, formulas[0].length).setFormulas(formulas);
sheet.getRange(r, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('bold').setFontSize(11).setBorder(true,false,true,false,false,false);
sheet.getRange(r+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('normal');
sheet.setColumnWidth(1, 300);
sheet.setColumnWidth(2, 52);
sheet.setColumnWidth(3, 80);
sheet.setColumnWidth(4, 45);
sheet.setColumnWidth(5, 62);
sheet.setColumnWidth(6, 72);
sheet.setColumnWidth(7, 82);
sheet.setColumnWidth(8, 150);
sheet.setColumnWidth(9, 110);
sheet.setColumnWidth(10, 115);
sheet.setColumnWidth(11, 122);
}
function getCampaignStats(start, end, reportSheet, rowNum) {
var TO = getAdWordsFormattedDate(end, 'yyyyMMdd');
var FROM = getAdWordsFormattedDate(start, 'yyyyMMdd');
var formattedTO = getAdWordsFormattedDate(end, 'MMM dd, yyyy');
var formattedFROM = getAdWordsFormattedDate(start, 'MMM dd, yyyy');
var dateHead = formattedFROM + ' - ' + formattedTO;
var dateRow = [dateHead];
while(dateRow.length != reportHeader.length) {
dateRow.push('');
}
var OUTPUT = [dateRow,reportHeader];
var OPTIONS = { includeZeroImpressions : true };
var cols = ['CampaignName','Amount','Clicks','Impressions','Ctr','AverageCpc','Cost',
'AveragePosition','Conversions','ClickAssistedConversions','CostPerConversion',
'ConversionRate','ConversionValue','ClickAssistedConversionValue'];
var report = 'CAMPAIGN_PERFORMANCE_REPORT';
var query = ['select',cols.join(','),'from',report,
ONLY_ACTIVE ? 'where CampaignStatus = ENABLED and Clicks > 0' : 'where Clicks > 0',
'during',FROM + ',' + TO].join(' ');
var reportIter = AdWordsApp.report(query, OPTIONS).rows();
while(reportIter.hasNext()){
var row = reportIter.next();
var row_array = [];
for(var k in cols) {
row_array.push(row[cols[k]]);
}
var convValPerCost = (row.Cost == 0) ? 0 : (parseFloat(row.ConversionValue.toString().replace(/,/g, '')) / parseFloat(row.Cost.toString().replace(/,/g, '')));
row_array.push(convValPerCost);
OUTPUT.push(row_array);
}
var totals = ['Total'];
while(totals.length != reportHeader.length) {
totals.push(0);
}
OUTPUT.push(totals);
reportSheet.getRange(rowNum, 1, OUTPUT.length, OUTPUT[0].length).setValues(OUTPUT).setFontSize(10);
reportSheet.getRange(rowNum, 1, 1, OUTPUT[0].length).merge().setFontColor('#ffffff').setBackground('#4f81bd');
reportSheet.getRange(rowNum, 1, 2, OUTPUT[0].length).setFontSize(11);
reportSheet.getRange(rowNum+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setBackground('#dbe5f1');
reportSheet.getRange(rowNum+2, 1, OUTPUT.length-3, OUTPUT[0].length).sort([{column: 9, ascending: false}, {column: 7, ascending: true}]);
var r = reportSheet.getLastRow();
var e = r-1;
var s = rowNum + 2;
var formulas = [['=SUM(B'+s+':B'+e+')', '=SUM(C'+s+':C'+e+')', '=SUM(D'+s+':D'+e+')',
'=C'+r+'/D'+r, '=G'+r+'/C'+r, '=SUM(G'+s+':G'+e+')',
'=AVERAGE(H'+s+':H'+e+')', '=SUM(I'+s+':I'+e+')', '=SUM(J'+s+':J'+e+')',
'=G'+r+'/I'+r, '=I'+r+'/C'+r, '=SUM(M'+s+':M'+e+')',
'=SUM(N'+s+':N'+e+')', '=M'+r+'/G'+r]];
reportSheet.getRange(r, 2, 1, formulas[0].length).setFormulas(formulas);
reportSheet.getRange(r, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('bold').setFontSize(11).setBorder(true,false,true,false,false,false);
reportSheet.getRange(r+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('normal');
reportSheet.setColumnWidth(1, 300);
reportSheet.setColumnWidth(2, 80);
reportSheet.setColumnWidth(3, 60);
reportSheet.setColumnWidth(4, 80);
reportSheet.setColumnWidth(5, 62);
reportSheet.setColumnWidth(6, 70);
reportSheet.setColumnWidth(7, 90);
reportSheet.setColumnWidth(8, 65);
reportSheet.setColumnWidth(9, 85);
reportSheet.setColumnWidth(10, 135);
reportSheet.setColumnWidth(11, 90);
reportSheet.setColumnWidth(12, 80);
reportSheet.setColumnWidth(13, 122);
reportSheet.setColumnWidth(14, 170);
reportSheet.setColumnWidth(15, 122);
}
function getNetworkStats(start, end, reportSheet, rowNum) {
var shoppingMap = {};
var iter = AdWordsApp.shoppingCampaigns().get();
while(iter.hasNext()) {
shoppingMap[iter.next().getId()] = 1;
}
var TO = getAdWordsFormattedDate(end, 'yyyyMMdd');
var FROM = getAdWordsFormattedDate(start, 'yyyyMMdd');
var formattedTO = getAdWordsFormattedDate(end, 'MMM dd, yyyy');
var formattedFROM = getAdWordsFormattedDate(start, 'MMM dd, yyyy');
var dateHead = formattedFROM + ' - ' + formattedTO;
var dateRow = [dateHead];
while(dateRow.length != summaryHeader.length) {
dateRow.push('');
}
var OUTPUT = [dateRow,summaryHeader];
var initMap = {
'Clicks': 0,'Impressions': 0, 'Cost': 0, 'AveragePosition': 0, 'Conversions': 0,
'ClickAssistedConversions': 0, 'ConversionValue': 0,'ClickAssistedConversionValue': 0
}
var map = {
'Search Network': JSON.parse(JSON.stringify(initMap)),
'Display Network': JSON.parse(JSON.stringify(initMap)),
'Shopping Network': JSON.parse(JSON.stringify(initMap))
};
var OPTIONS = { includeZeroImpressions : false };
var cols = ['AdNetworkType1', 'CampaignId','Clicks','Impressions','Cost',
'AveragePosition','Conversions','ClickAssistedConversions',
'ConversionValue','ClickAssistedConversionValue'];
var report = 'CAMPAIGN_PERFORMANCE_REPORT';
var query = ['select',cols.join(','),'from',report,
ONLY_ACTIVE ? 'where CampaignStatus = ENABLED' : '',
'during',FROM + ',' + TO].join(' ');
var reportIter = AdWordsApp.report(query, OPTIONS).rows();
while(reportIter.hasNext()){
var row = reportIter.next();
if(shoppingMap[row.CampaignId]) {
row.AdNetworkType1 = 'Shopping Network';
}
map[row.AdNetworkType1].Impressions += parseInt(row.Impressions, 10);
map[row.AdNetworkType1].Clicks += parseInt(row.Clicks, 10);
map[row.AdNetworkType1].Conversions += parseInt(row.Conversions.toString().replace(/,/g,''), 10);
map[row.AdNetworkType1].ClickAssistedConversions += parseInt(row.ClickAssistedConversions.toString().replace(/,/g,''), 10);
map[row.AdNetworkType1].Cost += parseFloat(row.Cost.toString().replace(/,/g,''));
map[row.AdNetworkType1].ConversionValue += parseFloat(row.ConversionValue.toString().replace(/,/g,''));
map[row.AdNetworkType1].ClickAssistedConversionValue += parseFloat(row.ClickAssistedConversionValue.toString().replace(/,/g,''));
map[row.AdNetworkType1].AveragePosition += parseFloat(row.AveragePosition)*parseInt(row.Impressions, 10);
}
var cols = ['Clicks','Impressions','Ctr','AverageCpc','Cost',
'AveragePosition','Conversions','ClickAssistedConversions','CostPerConversion',
'ConversionRate','ConversionValue','ClickAssistedConversionValue'];
for(var network in map) {
var row = map[network];
var row_array = [network];
row.Ctr = row.Impressions == 0 ? 0 : round(100*(row.Clicks/row.Impressions),2)+'%';
row.ConversionRate = row.Clicks == 0 ? 0 : round(100*(row.Conversions/row.Clicks),2)+'%';
row.AveragePosition = row.Impressions == 0 ? 0 : round((row.AveragePosition/row.Impressions),1);
row.AverageCpc = row.Clicks == 0 ? 0 : round((row.Cost/row.Clicks),2);
row.CostPerConversion = row.Conversions == 0 ? 0 : round((row.Cost/row.Conversions),2);
//Logger.log(JSON.stringify(row))
for(var k in cols) {
row_array.push(row[cols[k]]);
}
var convValPerCost = (row.Cost == 0) ? 0 : round(row.ConversionValue/ row.Cost, 2);
row_array.push(convValPerCost);
OUTPUT.push(row_array);
}
var totals = ['Total'];
while(totals.length != summaryHeader.length) {
totals.push(0);
}
OUTPUT.push(totals);
reportSheet.getRange(rowNum, 1, OUTPUT.length, OUTPUT[0].length).setValues(OUTPUT).setFontSize(10);
reportSheet.getRange(rowNum, 1, 1, OUTPUT[0].length).merge().setFontColor('#ffffff').setBackground('#4f81bd');
reportSheet.getRange(rowNum, 1, 2, OUTPUT[0].length).setFontSize(11);
reportSheet.getRange(rowNum+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setBackground('#dbe5f1');
reportSheet.getRange(rowNum+2, 1, OUTPUT.length-3, OUTPUT[0].length).sort([{column: 8, ascending: false}, {column: 6, ascending: true}]);
var r = reportSheet.getLastRow();
var e = r-1;
var s = rowNum + 2;
var formulas = [['=SUM(B'+s+':B'+e+')', '=SUM(C'+s+':C'+e+')',
'=B'+r+'/C'+r, '=F'+r+'/B'+r, '=SUM(F'+s+':F'+e+')',
'=AVERAGE(G'+s+':G'+e+')', '=SUM(H'+s+':H'+e+')', '=SUM(K'+s+':K'+e+')',
'=F'+r+'/H'+r, '=H'+r+'/B'+r, '=SUM(L'+s+':L'+e+')',
'=SUM(M'+s+':M'+e+')', '=L'+r+'/F'+r]];
reportSheet.getRange(r, 2, 1, formulas[0].length).setFormulas(formulas);
reportSheet.getRange(r, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('bold').setFontSize(11).setBorder(true,false,true,false,false,false);
reportSheet.getRange(r+1, 1, 1, OUTPUT[0].length).setFontColor('#000000').setFontWeight('normal');
reportSheet.setColumnWidth(1, 300);
reportSheet.setColumnWidth(2, 60);
reportSheet.setColumnWidth(3, 80);
reportSheet.setColumnWidth(4, 62);
reportSheet.setColumnWidth(5, 70);
reportSheet.setColumnWidth(6, 90);
reportSheet.setColumnWidth(7, 65);
reportSheet.setColumnWidth(8, 85);
reportSheet.setColumnWidth(9, 135);
reportSheet.setColumnWidth(10, 90);
reportSheet.setColumnWidth(11, 80);
reportSheet.setColumnWidth(12, 122);
reportSheet.setColumnWidth(13, 170);
reportSheet.setColumnWidth(14, 122);
}
/**
* Get AdWords Formatted date for n days back
* @param {int} d - Numer of days to go back for start/end date
* @return {String} - Formatted date yyyyMMdd
**/
function getAdWordsFormattedDate(d, format){
var date = new Date();
date.setDate(date.getDate() - d);
return Utilities.formatDate(date,AdWordsApp.currentAccount().getTimeZone(),format);
}
function log(msg) {
var time = Utilities.formatDate(new Date(),
AdWordsApp.currentAccount().getTimeZone(),
'yyyy-MM-dd HH:mm:ss.SSS');
Logger.log(time + ' - ' + msg);
}
function round(num,n) {
return +(Math.round(num + "e+"+n) + "e-"+n);
}
?>