5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google SheetsへLookerのデータを出力する方法

Last updated at Posted at 2019-05-29

LookerはGoogle Sheetsへ直接データを出力することが可能です。
本記事において、よりスムーズに出力するための追加機能をご紹介します。(本記事は、弊社ヘルプドキュメントに記載内容の抄訳となります)
##Looker側の設定##
Lookerのレポート(以降、Lookと呼びます)を出力する方法は、こちらのガイドに記載がありますが、以下のステップとなります:

  1. Lookページにてギアアイコンをクリックし、"設定の編集"を選択します
  2. Public AccessをONに変更します
  3. 変更を保存します
  4. Google Spreadsheet用のURLをコピーします
  5. Google Spreadsheetのデータを反映したい左上のセルにURLを貼り付け、エンターキーを押します

##インポート機能の改良##
上記のURLには、Google Sheetsの組み込みImportXML機能が含まれています。ロード時間が長くなってしまうケースがあるため、以下のようなlookerFetchData関数を作成いただくことも可能です。


function lookerFetchData(url) {
  url = url.replace(/(\/\w+\.)txt|html|csv|gsxml(\?.*)?/, "$1csv$2");
  var csvString = UrlFetchApp.fetch(url).getContentText();
  var dataIn = Utilities.parseCsv(csvString);
  var dataOut = dataIn.map(function(row) {
    return row.map(function(val) {
      if (val == '') return '';
      var dateMatch = /(\d{4})\-(\d{2})-*(\d{0,})/.exec(val);
      while (dateMatch != null) {
        // first index is full match
        return new Date(dateMatch[1], dateMatch[2] - 1, dateMatch[3] || 1);
      };
      if (val.match(/[-a-zA-Z]/)) {
        return String(val)
      };

      val = val.replace(/[^\d.]/g, '');

      if (val.match(/[0-9.]+/))
        return Number(val);

      return Number(parseInt(val));
     });
  });
  return dataOut;
}

Google Sheets内でこのスクリプトを利用するには:

  1. Sheetのメニューからツール > スクリプト・エディタを開きます
  2. 新規プロジェクトを作成します
  3. 上記スクリプトをスクリプト・エディタへ貼り付け保存します(自由に名前をつけて構いません)。スクリプト・エディタを閉じて、Google Sheetを再読込します。
  4. ImportXML関数をlookerFetchDataに置き換えます。
    ##自動更新スクリプト##
    最終的に、Google Sheetが自動的にリフレッシュし、Lookerから自動的にデータを読み込むようにするために、以下のスクリプトを利用することも可能です:

function onOpen(){
  var e=SpreadsheetApp.getActiveSpreadsheet();
  var t=[{name:"Refresh This Sheet",functionName:"Refresh"},{name:"Refresh All Sheets",functionName:"RefreshAll"}];
  e.addMenu("Looker",t)
}

function onInstall(e){
  onOpen(e)
}
function Refresh(e){
  var t=SpreadsheetApp.getActiveSheet();
  if(typeof e!=="undefined"){
    t=e
  }
  var n=t.getDataRange();
  var r=find("ImportXML",n);
  var y=find("lookerFetchData", n);
  for(var i=0;i<r.length;i++){
    r[i].setValue(r[i].getFormula().replace(/(.gsxml[^"]*)"/,".gsxml?apply_formatting=true&apply_vis=true&refresh="+(new Date).getTime()+'"'))
  }
  for(var i=0;i<y.length;i++){
    y[i].setValue(y[i].getFormula().replace(/(.html[^"]*|.txt[^"]*)"/,".txt?apply_formatting=true&apply_vis=true&refresh="+(new Date).getTime()+'"'))
  }
}
function RefreshAll(){
  var e=SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for(var t=0;t<e.length;t++){
    Refresh(e[t])
  }
}
function find(e,t){
  var n=t.getFormulas();
  var r=[];
  for(var i=0;i<n.length;i++){
    for(var s=0;s<n[i].length;s++){
      if(n[i][s].indexOf(e)>-1){
        r.push(t.getCell(i+1,s+1))
      }
    }
  }
  return r
}

これを有効にするための手順は、Import関数の場合と同様です。

  1. Sheetのメニューからツール > スクリプト・エディタを開きます
  2. 新規プロジェクトを作成します
  3. 上記スクリプトをスクリプト・エディタへ貼り付け保存します(自由に名前をつけて構いません)。スクリプト・エディタを閉じて、Google Sheetを再読込します。
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?