質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.01%

AdWords scriptでキャンペーンごとのレポートを取得したい。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 986

takesu

score 12

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);
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる