GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介をするシリーズをお送りしています。

前回の記事はこちら。

GASでマネーフォワード請求書の請求書一覧を取得するスクリプト
GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介をするシリーズです。今回は、GASでマネーフォワード請求書の請求書一覧を取得するスクリプトについてお伝えしていきます。

マネーフォワードクラウド請求書から請求書一覧を取得するスクリプトを紹介しました。

ただ、請求書一覧のJSONデータをそのままログに書き出すだけでしたので、スプレッドシートに書き出していきたいと思います。

今回は、GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法です。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

前回紹介したスクリプトはこちらでした。

function getBillings() {

  const accessToken = getMFInvoiceService_().getAccessToken();

  const baseUrl = 'https://invoice.moneyforward.com/api/v2/billings';
  const params = {
    method: 'get',
    headers: {
      accept: 'application/json',
      Authorization: 'Bearer ' + accessToken
    }
  };
  
  const requestUrl = baseUrl;
  const response = UrlFetchApp.fetch(requestUrl, params); 
  console.log(response.getContentText());
}  

マネーフォワードクラウド請求書にリクエストを行うもので、ログを確認すると以下のように請求書一覧のデータを確認できます(モザイクばかりですが…汗)。

GASで取得した請求書一覧データ

今回は、これらのデータをスプレッドシートに書き出していきたいと思います。

ちなみに、OAuth2ライブラリの導入や、アプリケーションの作成、認証とアクセストークンの取得は終えているものとしています。

まだの方は、この記事あたりからシリーズを参考におさらいしてくださいね。

請求書一覧をスプレッドシートに書き出すスクリプト

早速ですが、前述のスクリプトを修正して請求書一覧をスプレッドシートに書き出すスクリプトを作成しました。

こちらです!

function getBillings() {

  const accessToken = getMFInvoiceService_().getAccessToken();

  const baseUrl = 'https://invoice.moneyforward.com/api/v2/billings';
  const params = {
    method: 'get',
    headers: {
      accept: 'application/json',
      Authorization: 'Bearer ' + accessToken
    }
  };
  
  const requestUrl = baseUrl;
  const response = UrlFetchApp.fetch(requestUrl, params); 
  
  const values = [];  
  const billings = JSON.parse(response.getContentText());
  const {data, meta} = billings;
  
  for (const billing of data) {
    const {id, attributes} = billing;
    const {office_name, partner_name, title, total_price, sales_date, due_date} = attributes;
    const record = [id, office_name, partner_name, title, total_price, sales_date, due_date];
    values.push(record);
  }
  
  SpreadsheetApp.getActiveSheet().getRange(1, 1, values.length, values[0].length).setValues(values);
}

15行目までは、前回のスクリプトと一緒ですね。

それ以降に処理を追加していますので、解説をしていきましょう。

請求書データを表すJSONデータからデータを取り出す

まず、請求書一覧データはJSON形式で受け取っていまして、こちらの記事でもお伝えしている通り、以下のような構造になっています。

{
  "data": [
    {
      "id": ID,
      "attributes": {
        "office_name": 事業所名,
        "partner_name": 取引先名,
        "title": 件名,
        "total_price": 税込価格,
        "sales_date": 売上計上日,
        "due_date": 支払日
      }
  },
  …
 "meta" : {
    "total_count": 件数,
    "total_pages": 全ページ数,
    "current_page": 現在のページ数,
    "per_page": 1ページあたりの件数
  }
}

dataの中に配列の要素として請求書が100件あり、その中にidとattributesが、そしてさらにそのattributesの配下にいろいろな情報が格納されています。

ここからほしいデータを取り出していきますから、よくこの構造を覚えておいてくださいね。

JSONデータを文字列からオブジェクトに変換する

まず、このJSONデータは「文字列」ですので、オブジェクトに変換しましょう。

オブジェクトにすれば、ほしいデータを取り出しやすくなりますからね。

JSONデータをオブジェクトに変換するには、JSONオブジェクトのparseメソッドです。

JSON.parse(JSONデータ)

それを行っているのが、18行目ですね。

オブジェクトの分割代入でデータを取り出す

取得できたオブジェクトの直下には、dataプロパティとmetaプロパティがありますので、19行目でそれぞれ、定数dataと定数metaとして取得します。

(metaは今回は使用しませんが、次回で使用します。)

これは、オブジェクトの分割代入というもので、以下のようにして変数1にプロパティ1の値、変数2にプロパティ2の値、…とまとめて代入できるというものです。

{変数1, 変数2, …} = {プロパティ1: 値1, プロパティ2, 値2, …}

ちなみに、対応する変数とプロパティは同じ名前でないとダメです。

すべての請求書のデータを取り出す

定数dataは要素を100件持つ配列ですので、for…of文でループをします。

まず、ループで取り出した請求書を表すオブジェクトbillingは、まず直下にidプロパティとattributesプロパティを持つので、オブジェクトの分割代入を使って、それぞれ定数に格納します(22行目)。

さらに、attributesの中に、以下プロパティがあるので、それも同様にオブジェクトの分割代入で同名の定数に取り出します(23行目)。

プロパティ 説明
office_name 事業者名
partner_name 取引先名
title 件名
total_price 総額
sales_date 請求日
due_date 支払日

データを二次元配列化してスプレッドシートに書き出す

そのようにオブジェクトから取り出したデータは、スプレッドシートに書き出すための二次元配列に入れ直します

17行目で、そのための空の配列valuesを用意しておきます。

ループ内で、請求書のオブジェクトから取り出した各定数を以下の表のように配列recordに格納して、配列valuesにプッシュ、つまり最後尾に要素として追加します(24, 25行目)。

インデックス 定数 説明
0 id ID
1 office_name 事業者名
2 partner_name 取引先名
3 title 件名
4 total_price 総額
5 sales_date 請求日
6 due_date 支払日

配列valuesは、配列の配列つまり二次元配列になります。

それを、28行目でスプレッドシートに書き出すというわけです。

実際に実行した結果がこちらです。

マネーフォワードクラウド請求書のデータをスプレッドシートに出力

シートの最下部までスクロールすると、ぴったり100件出力されていました。

まとめ

以上、GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法をお伝えしました。

JSONデータをオブジェクトに変換すること、またそこからオブジェクトの分割代入などを活用して、うまく取り出しましょうね。

次回は、100件ではなくて全件取得できるようにスクリプトを改良していきます。

マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト
GASによるマネーフォワードクラウド請求書APIの操作についてできる限りていねいに紹介するシリーズです。今回は、マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプトを紹介します。

どうぞお楽しみに!

連載目次:【初心者向け】GASでマネーフォワード請求書API

マネーフォワード請求書APIを使用することで、GASからマネーフォワード請求書のデータを取得したり、操作をしたりすることが可能です。このシリーズでは、そのはじめの一歩として、マネーフォワード請求書APIとは何か?またGASによるアクセスの初歩をお伝えしていきます!
  1. はじめてのマネーフォワード請求書API~その概要とおおまかな手順
  2. マネーフォワード請求書APIへのアクセスをテストしてみよう!
  3. GAS用のマネーフォワード請求書APIアプリケーションを作成する手順
  4. GASでAPIを操作をする強い味方「OAuth2 for Apps Script」ライブラリとその導入
  5. GASでマネーフォワードクラウド請求書APIへの認証とアクセストークンの取得を行う方法
  6. OAuth2 for Apps Scriptライブラリを使ってサービスを作るスクリプトを解説
  7. OAuth2 for Apps Scriptライブラリはどうやって認証用URLを作成しているのか
  8. OAuth2 for Apps Scriptライブラリはどうやってアクセストークンを取得するのか
  9. GASではじめてのマネーフォワードクラウド請求書APIへリクエスト
  10. マネーフォワードクラウド請求書APIから請求書一覧の取得をテストしてみよう!
  11. マネーフォワードクラウド請求書APIによる請求書一覧のデータを読み取ってみよう!
  12. GASでマネーフォワード請求書の請求書一覧を取得するスクリプト
  13. GASでマネーフォワードクラウド請求書の請求書一覧をスプレッドシートに書き出す方法
  14. マネーフォワードクラウド請求書の請求書一覧の全件をスプレッドシートに書き出すスクリプト

タイトルとURLをコピーしました