GASでGoogle連絡先から取得したデータをスプレッドシートに書き込む【送付状作成ツール③】

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

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

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

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

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

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

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

Google連絡先の取得

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

GASでGoogle連絡先の「会社名」と「役職」を取得する【送付状作成ツール②】

2019.11.02

コードがこちらです。

 

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

 

最終的な目的は、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行目でログ出力します(黄色ハイライトの行)

 

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

 

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

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

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

pushメソッド

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

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

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

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

  • 6行目 → ループ処理の前で空配列を宣言
  • 27行目 → 「ひとり分の連絡先配列」を arrContactAll に追加(push)
 

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

 

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

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

二次元配列のセット

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

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

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

getRangeメソッド

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

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

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

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

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

配列のlengthプロパティ

 

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

setValuesメソッド

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

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

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

ポイント

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

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

 

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

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

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

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

 

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

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

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

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

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

 

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

GASでGoogle連絡先から「住所」を取得する【送付状作成ツール④】

2019.11.07

 


sweeep|請求書AI-OCR

請求書の会計処理を自動化します
請求書AI-OCR「sweeep」

面倒な請求書の会計処理をAIで自動化。100枚をたった3分で処理できます。月末に貯まった請求書を一掃しましょう。