1 実現したいこと
GASとGoogleのPlaces apiを使ってスプレッドシートのA列にある施設名から、B列・C列・D列・E列に情報を記載したい
2 具体的な内容
巣プレっとシートのA列には、施設名が入力されており、GoogleのPlaces apiを使って、B列に施設名、C列に住所、D列に緯度、E列に経度を入力したいと考えています。
スプレッドシート名は「list」です。
3 試したこと
下記のコードをスプレッドシートのスクリプトに張り付けても、ver dataの行でエラーになってしまいます。
原因がわからず、教えていただけますと嬉しいです。
4 実際に使ったGAS
var APIKEY = "***" // APIキー
function Main() {
// インプットフォームの回答を設定する
SetInputList();
// 戻り値を格納する配列
var ArrRes = [];
for (var i = 0; i <= LastRow-2; i++) {
// PlacesAPI関数によるname,formatted_address,lat,lngの取得 var data = PlacesAPI(ArrInputList[i][0], APIKEY); // 戻り値を配列に格納する ArrRes[i] = []; ArrRes[i][0] = data[0]; // name ArrRes[i][1] = data[1]; // formatted_address ArrRes[i][2] = data[2]; // lat ArrRes[i][3] = data[3]; // lng
}
// 結果をスプレッドシートに出力する
var bk = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシートを取得する
var sh = bk.getSheetByName('フォームの回答'); // Listシートを取得する
for (var i = 0; i <= LastRow-2; i++) {
// 値をセルに入力する sh.getRange(i + 2, 2).setValue(ArrRes[i][0]); // name sh.getRange(i + 2, 3).setValue(ArrRes[i][1]); // formatted_address sh.getRange(i + 2, 4).setValue(ArrRes[i][2]); // lat sh.getRange(i + 2, 5).setValue(ArrRes[i][3]); // lng
}
}
//**********************************************************************************************
// インプットフォームの回答を作成する関数
//**********************************************************************************************
function SetInputList() {
// addressシートの内容を配列に格納する
var bk = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなスプレッドシートを取得する
var sh = bk.getSheetByName('フォームの回答'); // Listシートを取得する
LastRow = sh.getLastRow(); // 最終行を取得する
// var colLst = sh.getLastColumn(); // 最終列を取得する
Logger.log(LastRow);
// データを配列に格納する
// Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
ArrInputList = sh.getRange(2, 1, LastRow-1, 1).getValues();
Logger.log(ArrInputList);
}
//**********************************************************************************************
// PlacesAPIを実行する関数
//**********************************************************************************************
function PlacesAPI(InputText, APIKEY){
// URLを作成する
var url = "https://maps.googleapis.com/maps/api/place/findplacefromtext/json?language=ja" +
"&input=" + InputText + // for example, a name, address, or phone number "&inputtype=textquery" + // textquery or phonenumber "&fields=formatted_address,geometry,name" + // fields "&key=" + APIKEY; // API key
Logger.log(url);
// HTTPリクエストを行う
var res = UrlFetchApp.fetch(url,{muteHttpExceptions:true});
Logger.log(res);
// HTTPレスポンスを文字列として取得、JSON形式の文字列を解析してオブジェクトとして返す
var json = JSON.parse(res.getContentText());
Logger.log(json);
if (json["status"] == "OK") {
var json_formatted_address = json["candidates"][0]["formatted_address"]; var json_lat = json["candidates"][0]["geometry"]["location"]["lat"]; var json_lng = json["candidates"][0]["geometry"]["location"]["lng"];
var json_name = json["candidates"][0]["name"];
// 「日本、」「郵便番号」を除外 var formatted_address = json_formatted_address.split(' '); return [json_name,formatted_address[1],json_lat,json_lng];
} else {
//"status"が"OK"以外は空白として返却する return ["","","",""]
}
}
あなたの回答
tips
プレビュー