368 人が現在オンライン
368 人が現在オンライン
Google AdWords のログイン、MCC、API、Editor、認定資格などについてユーザー同士で意見交換ができます。運用者ならではの質問や回答を投げかけ合って問題を解決していきましょう。
ガイドを表示
star_border
返信

AdWords scriptでキャンペーンごとのレポートを上書きで自動的に取得したい

[ 編集済み ]
初級者 ✭

AdWords scriptでレポートデータをGoogleスプレッドシートに流し込む

http://unyoo.jp/2015/02/adwords-script-g-spreadsheet/

を参考にAdWords scriptで1年間レポートを毎日自動的に更新集計したいのですが、参考サイトのタリ方では、常に新しいスプレッドシートが作成されてしまいます。 これを一つのスプレッドシートに上書きで保存するようにしたいのですが、方法がわかりません。 参考サイトの中に

最初の部分は、ファイル名(レポート名+日付)をつけたスプレッドシートを生成するための変数指定になっています。最後のexportToSheetメソッドで、実際のスプレッドシート生成とデータのエキスポートを同時に処理するようになっています。これは実はいろいろやり方はあるかと思ってまして、

新しいスプレッドシートを生成
既成のテンプレートをコピー利用する
既成のスプレッドシートの値を毎回消して利用する
今回の場合は1.にしていますが、みなさんの好みで処理方法は選んでください。

とあるのですが、「既成のスプレッドシートの値を毎回消して利用する」のやり方がわかりません。 ご教授お願いいたします。

// グローバル変数
var email = 'メールアドレスを記入';
var spreadsheet_url = 'spreadsheetのurlを記入;
var formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd' 'HH:mm:ss");
var cid = AdWordsApp.currentAccount().getCustomerId();
var accountname = AdWordsApp.currentAccount().getName();

function main() {
var spreadsheet = copySpreadsheet(spreadsheet_url);
var rawsheet = spreadsheet.getSheetByName('rawdata');
var formatsheet = spreadsheet.getSheetByName('AW-cp');
formatsheet.getRange(1, 7, 1, 1).setValue(formattedDate);
formatsheet.getRange(1, 2, 1, 1).setValue('CID:');
formatsheet.getRange(1, 3, 1, 1).setValue(cid);
formatsheet.getRange(2, 2, 1, 1).setValue('アカウント名:');
formatsheet.getRange(2, 3, 1, 1).setValue(accountname);

// レポート取得
var report = AdWordsApp.report(
'SELECT CampaignName, Impressions, Clicks, Ctr, Cost, Conversions, AveragePosition ' +
'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
'WHERE Impressions > 0 ' +
'DURING 20160101,20161231');

// 上記AWQLで指定したデータをエキスポート
report.exportToSheet(rawsheet);

// コスト列でソート
rawsheet.sort(5, false);

// ヘッダー設定
var header = [
'キャンペーン名',
'インプレッション数',
'クリック数',
'クリック率',
'コスト',
'コンバージョン数',
'平均掲載順位',
'コンバージョン単価',
'コンバージョン率',
];
var headerrange = formatsheet.getRange(4, 2, 1, 9);
headerrange.setValues([header]);
headerrange.setHorizontalAlignment("center");
headerrange.setFontWeight("bold");
headerrange.setFontSize(8);

// rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
var lastRow = rawsheet.getLastRow();
var lastColumn = rawsheet.getLastColumn();
var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
formatsheet.getRange(5, 2, lastRow, lastColumn).setValues(copyValue);
// 処理後、rawdataシートを削除する
spreadsheet.deleteSheet(rawsheet);

// ログ記録とメール通知設定
Logger.log('キャンペーンレポート(2016年)の準備ができました\n' +
spreadsheet.getUrl());
if (email) {
MailApp.sendEmail(email,
'キャンペーンレポート(2016年)の準備ができました' + ' ' +accountname + ' ' + formattedDate,
spreadsheet.getUrl());
}
}

// スプレッドシートのコピー利用
function copySpreadsheet(spreadsheetUrl) {
return SpreadsheetApp.openByUrl(spreadsheetUrl).copy(
'キャンペーンレポート(2016年)' + ' ' + accountname + " " + formattedDate);
}

 

 

Re: AdWords scriptでキャンペーンごとのレポートを上書きで自動的に取得したい

レジェンド
スレッド上の表示が崩れているので、
http://unyoo.jp/2015/02/adwords-script-g-spreadsheet/
のサンプルコードをもとにシートに関する処理を解説すると、

9行目:3行目で指定したスプレッドシートをコピーする(以降はコピーしたスプレッドシートに対する操作)
10行目:rawdataという名前の付いたシートを取得
11行目:Aw-cpという名前の付いたシートを取得
26行目:「rawdataという名前の付いたシート」にレポートを出力
29行目:「rawdataという名前の付いたシート」を5列目の値でソート
32~47行目:Aw-cpという名前の付いたシートのヘッダーとデザインを変更
50~53行目:「rawdataという名前の付いたシート」の値を「Aw-cpという名前の付いたシート」にコピー
55行目:「rawdataという名前の付いたシート」を削除


となります。


細かな部分はいろいろ変更する必要がありますが、
9行目を、

var spreadsheet = SpreadsheetApp.openByUrl(spreadsheet_url);

と変更すると、3行目で指定したスプレッドシートを取得する、という意味に変わりますので、
スプレッドシートが増えることはありません。