GASでGoogle連絡先データをスプレッドシートに書き込む方法

こんにちは。ITライターのもり(@moripro3)です!GoogleAppsScriptの記事をお届けしています!

「送付状作成ツール」を題材として、GASの自動化事例をシリーズでお届けしています。

Googleサービスのひとつである「Google連絡先」の登録データをスプレッドシートに取得して、送付状の宛先欄に自動で書き込むGASツールです。

「自動化でバックオフィス革命」がモットーのオートメーションラボ株式会社では、このような流れで「送付状作成」を行っています。

送付状作成ツールの全体像2

※この連載シリーズは、GASの処理である赤枠部の範囲を紹介します。シリーズの最後で実物のツール(スプレッドシート)を公開しますので、ぜひご活用ください。

当シリーズのメイン処理は「Google連絡先のデータをスプレッドシートに取得する処理」です。

Google連絡先の取得

前回までの記事で、Google連絡先から「氏名」「会社名」「役職」の3項目を取得してログ出力する処理を作りました。

[kanren postid=”78735″]

コードがこちらです。

//Google連絡先に登録されている連絡先の「氏名」「会社名」「役職」を取得する
function Sample() {
  
  //Google連絡先から連絡先一覧を取得
  var contacts = ContactsApp.getContacts();
  
  //連絡先の登録件数分ループする
  for (var i = 0; i < contacts.length; i++) {
    
    var fullName = contacts[i].getFullName(); //氏名
    Logger.log('氏名 => %s', fullName);
    
    var companies = contacts[i].getCompanies(); //会社フィールド
    
    if (companies.length > 0) { //会社情報が未登録の場合エラーになるため
      
      //変数companiesは配列なので要素番号[0]の指定が必要
      var companyName = companies[0].getCompanyName(); //会社名
      var jobTitle = companies[0].getJobTitle(); //役職
      
      Logger.log('会社名 => %s', companyName);
      Logger.log('役職 => %s', jobTitle);
      
    }
  }
}

 

スクリプト実行ログです。Google連絡先の登録件数(4件)分について、「氏名」「会社名」「役職」を取得・出力できました。

[yy-mm-dd hh:mm:ss:xxx JST] 氏名 => 佐藤太郎
[yy-mm-dd hh:mm:ss:xxx JST] 会社名 => ABCコーポレーション
[yy-mm-dd hh:mm:ss:xxx JST] 役職 => 代表取締役
[yy-mm-dd hh:mm:ss:xxx JST] 氏名 => 田中次郎
[yy-mm-dd hh:mm:ss:xxx JST] 会社名 => 田中ホールディングス
[yy-mm-dd hh:mm:ss:xxx JST] 役職 => 代表取締役社長
[yy-mm-dd hh:mm:ss:xxx JST] 氏名 => 鈴木花子
[yy-mm-dd hh:mm:ss:xxx JST] 会社名 => SUZUKI商事
[yy-mm-dd hh:mm:ss:xxx JST] 役職 => 係長
[yy-mm-dd hh:mm:ss:xxx JST] 氏名 => 高橋和子
[yy-mm-dd hh:mm:ss:xxx JST] 会社名 => XYZカンパニー
[yy-mm-dd hh:mm:ss:xxx JST] 役職 =>

 

最終的な目的は、Google連絡先から取得したこれらのデータを、スプレッドシートに書き込んで名簿を作ることです。

Google連絡先から取得したデータをスプレッドシートに書き込む

今回の記事では「Google連絡先から取得したデータをスプレッドシートに書き込む処理」を作成します。

処理のポイントは「二次元配列の作成」です。

スプレッドシートへの書き込み処理は1回のみ!

これまでの記事で「氏名」「会社名」「役職」の3項目を取得しました。4件の連絡先が登録されているので、データの個数は 4件×3項目 = 12個です。

12個のデータを、このようにスプレッドシートに書き込みたいのですが、

Google連絡先をスプレッドシートに書き込む

ポイントは「12個のデータをどのように書き込むか?」です。

たとえば、ループ処理で1個ずつデータを書き込むと、連絡先が100件あったら 100×3項目 = 300回 の書き込み処理が発生するわけですね。

これでは非効率なので、連絡先の件数にかかわらず「スプレッドシートへの書き込み処理は1回のみ」とします。それを実現するポイントが「二次元配列」です。

各連絡先のデータをまとめて「二次元配列」を作成し、

二次元配列

その「二次元配列」を、配列ごとスプレッドシートにセットします。

二次元配列のセット

こうすることで、連絡先の件数にかかわらず、スプレッドシートへの書き込み処理が1回で済むのです。

Google連絡先から取得したデータを配列に格納する

それでは「1回で書き込む」仕組みが理解できたところで、まずは配列を作成しましょう。

「氏名」「会社名」「役職」の3項目で配列を作成します。

配列の変数名は arrContactPerson 、格納順は [会社名, 役職, 氏名] とします。22行目で配列に格納して、23行目でログ出力します(黄色ハイライトの行)

function exportContact() {
  
  //Google連絡先から連絡先一覧を取得
  var contacts = ContactsApp.getContacts();
  
  //連絡先の登録件数分ループする
  for (var i = 0; i < contacts.length; i++) {
    
    var fullName = contacts[i].getFullName(); //氏名
    
    var companies = contacts[i].getCompanies(); //会社フィールド
    
    if (companies.length > 0) { //会社情報が未登録の場合エラーになるため
      
      //変数companiesは配列なので要素番号[0]の指定が必要
      var companyName = companies[0].getCompanyName(); //会社名
      var jobTitle = companies[0].getJobTitle(); //役職
      
    }
    
    //ひとり分の連絡先を配列に格納
    var arrContactPerson = [companyName,jobTitle,fullName];
    Logger.log(arrContactPerson);
    
  }
  
}

 

スクリプト実行結果です。ひとり分の連絡先(3項目)を一次元配列にしました。

[yy-mm-dd hh:mm:ss:xxx JST] [ABCコーポレーション, 代表取締役, 佐藤太郎]
[yy-mm-dd hh:mm:ss:xxx JST] [田中ホールディングス, 代表取締役社長, 田中次郎]
[yy-mm-dd hh:mm:ss:xxx JST] [SUZUKI商事, 係長, 鈴木花子]
[yy-mm-dd hh:mm:ss:xxx JST] [XYZカンパニー, , 高橋和子]

 

各連絡先の配列から二次元配列を作る

スプレッドシートに1回で書き込むために、各連絡先の「一次元配列」をまとめて「二次元配列」を作ります。

JavaScriptの組み込みオブジェクトであるArrayオブジェクトのpushメソッドを使用します。

[box class=”blue_box” title=”pushメソッド”]

Arrayオブジェクト.push(要素)

配列の末尾に要素を追加します

[/box]

「空の配列」に「ひとり分の連絡先が格納された一次元配列」を追加していき、「二次元配列」を作成します。

二次元配列の変数名は arrContactAll とします。処理のポイントは2点です。

  • 6行目 → ループ処理の前で空配列を宣言
  • 27行目 → 「ひとり分の連絡先配列」を arrContactAll に追加(push)
function exportContact() {
  
  //Google連絡先から連絡先一覧を取得
  var contacts = ContactsApp.getContacts();
  
  var arrContactAll = []; //スプレッドシート書き込み用の配列
  
  //連絡先の登録件数分ループする
  for (var i = 0; i < contacts.length; i++) {
    
    var fullName = contacts[i].getFullName(); //氏名
    
    var companies = contacts[i].getCompanies(); //会社フィールド
    
    if (companies.length > 0) { //会社情報が未登録の場合エラーになるため
      
      //変数companiesは配列なので要素番号[0]の指定が必要
      var companyName = companies[0].getCompanyName(); //会社名
      var jobTitle = companies[0].getJobTitle(); //役職
      
    }
    
    //ひとり分の連絡先を配列に格納
    var arrContactPerson = [companyName,jobTitle,fullName];
    
    //スプレッドシート書き込み用配列に追加
    arrContactAll.push(arrContactPerson);
    
  }
  
  Logger.log(arrContactAll);
  
}

 

スクリプト実行ログです( arrContactAll の中身)連絡先4件分のデータを格納した「二次元配列」になっています。

[yy-mm-dd hh:mm:ss:xxx JST] [[ABCコーポレーション, 代表取締役, 佐藤太郎], [田中ホールディングス, 代表取締役社長, 田中次郎], [SUZUKI商事, 係長, 鈴木花子], [XYZカンパニー, , 高橋和子]]

 

二次元配列をスプレッドシートにセットする

最後に、二次元配列をスプレッドシートにセットすれば完成です。

二次元配列のセット

二次元配列をスプレッドシートにセットする場合、「セットする配列の大きさは○行×○列です」と、あらかじめ大きさを指定する必要があります(範囲指定を誤るとエラーになります)

ここでは、「A2セルを起点として、4行×3列の配列をセットする」という範囲の指定をします。

セルの範囲指定をする(セル範囲を取得する)メソッドが、SheetクラスのgetRangeメソッドです。

[box class=”blue_box” title=”getRangeメソッド”]

Sheetオブジェクト.getRange(範囲の開始行番号, 範囲の終了列番号, 行数, 列数)

シートのセル範囲を取得します

[/box]

getRangeメソッドの4つの引数は下記のように指定します。

  • 1.範囲の開始行番号 = 最終行+1
  • 2.範囲の開始列番号 = A列
  • 3.行数 = 配列のタテの長さ
  • 4.列数 = 配列のヨコの長さ

ポイントは配列の「タテ(行数)」と「ヨコ(列数)」の長さ指定です。配列のlengthプロパティで、タテ・ヨコの長さを取得します。

配列のlengthプロパティ

 

セル範囲の指定ができたら、RangeクラスのsetValuesメソッドで配列をセットします。

[box class=”blue_box” title=”setValuesメソッド”]

Rangeオブジェクト.setValues(配列)

配列をスプレッドシートの指定範囲にセットします

[/box]

「引数で受け取った配列を指定シートにセットする処理」を、独立したひとつの関数として作成します。

[box class=”yellow_box” title=”ポイント”]

配列の行数・列数を、lengthプロパティ (arr.length, arr[0].length) で取得することによって、配列の大きさ(件数・項目数)が変わってもコード変更が不要です。

[/box]

コードがこちらです。17行目でシートに配列をセットします(シート名はcontactとしています)

/*
* 配列を指定シートの最終行+1行目にセットする
* 
* @param {Object} 連絡先データを格納した配列
*/
function writeSpreadSheet(arr) {
  
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('contact');
  
  var lastRow = sheet.getLastRow();
  var col = 1; //A列
  
  var i = arr.length; //配列タテ
  var j = arr[0].length; //配列ヨコ
  
  //配列をスプレッドシートにセットする(最終行+1行目)
  sheet.getRange(lastRow+1, col, i, j).setValues(arr);
  
}

 

メイン関数で作成した二次元配列を、この writeSpreadSheet 関数に渡すとスプレッドシートに書き込むことができます。

スプレッドシートに配列をセット

【スクリプトまとめ】Google連絡先の氏名・会社名・役職をスプレッドシートに取得する

シリーズ第1回目~3回目を通して作成したスクリプトのまとめです。

function exportContact() {
  
  //Google連絡先から連絡先一覧を取得
  var contacts = ContactsApp.getContacts();
  
  var arrContactAll = []; //スプレッドシート書き込み用の配列
  
  //連絡先の登録件数分ループする
  for (var i = 0; i < contacts.length; i++) {
    
    var fullName = contacts[i].getFullName(); //氏名
    
    var companies = contacts[i].getCompanies(); //会社フィールド
    
    if (companies.length > 0) { //会社情報が未登録の場合エラーになるため
      
      //変数companiesは配列なので要素番号[0]の指定が必要
      var companyName = companies[0].getCompanyName(); //会社名
      var jobTitle = companies[0].getJobTitle(); //役職
      
    }
    
    //ひとり分の連絡先を配列に格納
    var arrContactPerson = [companyName,jobTitle,fullName];
    
    //スプレッドシート書き込み用配列に追加
    arrContactAll.push(arrContactPerson);
    
  }
  
  //配列をスプレッドシートにセット
  if (arrContactAll.length > 0) { //中身がある場合のみ
    writeSpreadSheet(arrContactAll);
  }
  
}

/*
* 配列を指定シートの最終行+1行目にセットする
* 
* @param {Object} 連絡先データを格納した配列
*/
function writeSpreadSheet(arr) {
  
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('contact');
  
  var lastRow = sheet.getLastRow();
  var col = 1; //A列
  
  var i = arr.length; //配列タテ
  var j = arr[0].length; //配列ヨコ
  
  //配列をスプレッドシートにセットする(最終行+1行目)
  sheet.getRange(lastRow+1, col, i, j).setValues(arr);
  
}

 

【まとめ】Google連絡先のデータをスプレッドシートに書き込む

今回の記事では、Google連絡先から取得したデータをスプレッドシートに書き込む方法を紹介しました。

処理のポイントは「二次元配列の作成とセット」です。

この記事で紹介した下記2点は、「スプレッドシートへのデータ書き込み」でとても役立つのでぜひ覚えておきましょう!

  • ①データを「二次元配列」にまとめてから、配列ごとスプレッドシートにセットする
    →データ件数に関わらず、スプレッドシートへの書き込み処理が1回で済む!
  • ②セットする配列のタテ・ヨコの長さをlengthプロパティで取得する
    件数・項目数が増えても(配列の大きさが変わっても)、コードの変更が不要!

 

だんだんと名簿が出来あがってきました。次回は、Google連絡先から「住所」を取得する方法を紹介します。

[kanren postid=”78783″]

 

[box class=”pink_box”]

【連載目次:GASで作る送付状作成ツール】

  1. GASでGoogle連絡先の「氏名」を取得する【送付状作成ツール①】
  2. GASでGoogle連絡先の「会社名」と「役職」を取得する【送付状作成ツール②】
  3. GASでGoogle連絡先から取得したデータをスプレッドシートに書き込む【送付状作成ツール③】
  4. GASでGoogle連絡先から「住所」を取得する【送付状作成ツール④】
  5. GASでGoogle連絡先から「メールアドレス」と「電話番号」を取得する【送付状作成ツール⑤】
  6. GASでGoogle連絡先に新規登録された連絡先のみを取得する【送付状作成ツール⑥】
  7. GASでGoogle連絡先から取得したデータを使用して送付状を作る【送付状作成ツール⑦】<※ツール公開あり>
[/box]
請求書の受け取りはsweeepで自動化

【AI請求書処理】従来の請求書OCRでは対応できない非定型帳票や

自動会計仕訳も、sweeepなら対応可能!最短で即日導入、

面倒な設定不要。手軽に導入して請求業務を効率化。