LoginSignup
5
5

More than 5 years have passed since last update.

Googleフォームから投稿された住所から経度緯度を検索しGoogleスプレッドシートに追記するやつ

Posted at

表題の通り

getLocation()【GAS】住所から緯度経度を取得するより流用。

フォームの解答が入るSpreadsheetのスクリプトエディター上で、トリガー設定(投稿時→onFormSubmit())をすること。

fu*kgas.gs

// 【GAS】住所から緯度経度を取得する
function getLocation(address) {
  var requestUrl = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address; // Google Geocoding API
  var result = JSON.parse( UrlFetchApp.fetch(requestUrl) );
  if ( result['status'] === 'ZERO_RESULTS' ) { return 'No Result.' }
  var location = result['results'][0]['geometry']['location'];
  return location['lat'] +','+ location['lng'];
}


// フォームがサブミットされたら
function onFormSubmit(e) {

  Logger.log(e);

  try {
    address = e.namedValues["住所1(都道府県)"].toString() +' '+ e.namedValues["住所2(市区町村)"].toString();
    address = address.replace(/,/g, '');//配列をtoStringするとカンマが邪魔なので殺す
    Logger.log('address: '+address);

    latlng = getLocation(address);
    Logger.log('latlng: '+latlng);

    // 経度緯度を書き込むところは固定   
    var range = e.range
    var ss = SpreadsheetApp.getActiveSpreadsheet().getDataRange();
    ss.getCell( range.getRow(), 15 ).setValue(latlng);

  } catch (e) {
    //エラーが発生した場合に管理者にメールを送信する
    MailApp.sendEmail(Session.getActiveUser().getEmail(), "Error report", e.message);
  }
}
  • うまくいかない時は、スクリプトエディターの実行ログとにらめっこしよう。。
  • address.replace()してるのは、同じ名目名がかぶるとe.valueでは配列になっていて、それを.toString()するとゴミのようにカンマが入り込むので殺戮している
  • 経度緯度の追記箇所が右端から数えた数字の固定なので注意。-> ss.getCell( range.getRow(), 15 ).setValue(latlng);
    • 本当は、Header indexからターゲットの名目名のRowCountしてとかやればいいんだけど、クソデバッグめんどくさいので挫折した

いやほんとGASのデバッグめんどくさすぎて死ぬ

5
5
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
5