表題の通り
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のデバッグめんどくさすぎて死ぬ