GAS×freeeAPIでスプレッドシートのデータをfreeeに登録する方法

こんにちは。ITライターのもり(@moripro3)です!

「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。

前回の記事では、freeeAPIから取得したデータをスプレッドシートに出力する方法を紹介しました。

関連記事

こんにちは。ITライターのもり(@moripro3)です! 「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。 前回の記事では、GASでfreeeAPIを使うための作業手順を紹介しました[…]

今回の記事では、スプレッドシートのデータを、freeeAPIを使ってfreeeに登録する方法を紹介します。このような方にオススメです。

  • freeeのデータ登録で、csvファイルを経由する手間を省いて、スプレッドシートのデータをワンクリックで登録したい人
  • freeeAPIの公式リファレンスを読めるようになりたい人

スプレッドシートのデータをfreeeAPIで登録する

この記事では、「スプレッドシートのデータを元にした登録」の題材として「部門の作成」を紹介します。他にも、取引・請求書・勘定科目一覧・品目一覧など、色々なデータをfreeeAPIで登録することができます。

※freeeには、部門等の各種マスタを一括作成できる「csvインポート機能」もありますが、この記事のテーマである「部門の作成」は処理がシンプルなので、練習題材として使用しています。ぜひこの記事を活用して他のスクリプトを作ってみてください。

まずはfreeeAPIの情報を確認していきましょう。

APIを使ったデータ作成のメソッドを確認する

APIを使ったデータの作成(登録)は、HTTPリクエストのPOSTメソッドを使用します。

処理 メソッド
データの取得 GET
データの作成 POST
データの更新 PUT
データの削除 DELETE

freeeAPIにアクセスするリクエストURLを確認する

APIを使う上でポイントになるのが「リクエストURL」です。リクエストURLとは、APIにアクセスする宛先のことで、freeeAPIでは下記の3つを結合して作ります。

  • ①APIエンドポイント(固定値) = https://api.freee.co.jp/
  • ②個別URL = ※リファレンスで確認
  • ③パラメータ = ※リファレンスで確認

①+②+③を結合した文字列が、目的のリクエストURLです。

「部門の作成」について②③の値を確認します。まず「②個別URL」です。

「③パラメータ」は無しです(No parameters)

以上の情報から「部門の作成」のリクエストURLはこうなります。

  • ①APIエンドポイント = https://api.freee.co.jp/
  • ②個別URL = /api/1/sections
  • ③パラメータ = 無し
https://api.freee.co.jp/api/1/sections
他の種類のデータを作成する場合は、上記の方法でリクエストURLを確認しましょう。

スプレッドシートにデータを用意する

APIに送信して登録するデータのことを「リクエストボディ」と呼びます。freeeAPI公式リファレンスの「Request body」の欄の「Model」をクリックして、データ登録に必要な項目を確認します。

赤文字の*は、必須指定の項目です。それ以外は任意指定です。

上記の項目説明を見ながら、スプレッドシートにデータを用意します(必須項目の事業所IDはスクリプト内に記述します)

スプレッドシートのデータをfreeeAPIに送信するスクリプト

これで準備ができたので、スクリプトを書いていきます。この記事では処理のポイント部分のみ解説します。

ポイント:スプレッドシートのデータ(配列)をJSONデータにする

APIへの送信データ本文(payload)は、JSONデータを指定します。スプレッドシートに用意したデータは「配列」として取得されるので、「配列」を「JSONデータ」に変換する処理が必要です。下記の2ステップでJSONデータを作ります。

  • 【ステップ1】「配列」を「オブジェクト」にする
  • 【ステップ2】「オブジェクト」を「JSONデータ」にする

スプレッドシートから取得したデータはこのような配列です。

[ '開発部', 'システム開発部', 'KAI', 'DEV' ]

この配列から、 {キー : 値} のセットであるオブジェクトを作ります。これが1件の部門です。

{ company_id: 'xxxxxxx',
  name: '開発部',
  long_name: 'システム開発部',
  shortcut1: 'KAI',
  shortcut2: 'DEV' }

上記のオブジェクトを、JSON.stringify()メソッドでJSONデータに変換します。

(参考)公式リファレンスでリクエストボディ(JSONデータ)のExample Valueを確認できます。

スクリプトまとめ

スプレッドシートのデータをfreeeAPIに送信してデータ登録するスクリプトです。

「GASでfreeeAPIを使うための作業手順を分かりやすく解説」で書いたfreeeAPI認証用のスクリプトを、同じプロジェクト内に記述しておく必要があります。
function createSections() {

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("登録");

  const access_token = getService().getAccessToken();
  const url = "https://api.freee.co.jp/api/1/sections"; //リクエストURL

  const values = sheet.getDataRange().getValues();
  
  for (let i = 1; i < values.length; i++) {

    const json = createJSON_(values[i]);
    postfreeeAPI_(access_token, json, url);

  }

}

/**
* 配列からJSONデータを作成する
*
* @param {Object} array 1件分の配列
* @return {Object} obj JSONデータ 
*/
function createJSON_(array) {

  const company_id = "事業所IDを設定"; //事業所ID

  const obj = {
    company_id: company_id,
    name: array[0],
    long_name: array[1],
    shortcut1: array[2],
    shortcut2: array[3]
  }

  for (let key in obj) {
    //値無しのキーを削除
    if (obj[key] == null || obj[key] === "") delete obj[key];

  }

  //オブジェクトをJSONデータに変換
  const json = JSON.stringify(obj);

  return json;

}

/**
* freeeAPIにPOSTリクエストを送信する
*
* @param {string} access_token アクセストークン
* @param {Object} json リクエストボディ
* @param {string} url リクエストURL
*/
function postfreeeAPI_(access_token, json, url) {

  const params = {
    method: "POST",
    contentType: "application/json",
    headers: { "Authorization": "Bearer " + access_token },
    payload: json,
    muteHttpExceptions: true //エラー発生時にログ出力
  }

  const response = UrlFetchApp.fetch(url, params);
  Logger.log(response);

  Utilities.sleep(1000); //短時間の連続アクセスを回避

}

スクリプト実行結果

スクリプトを実行すると、登録結果をログで確認できます。何らかのエラーが発生した場合も、エラーが出力されます。

スプレッドシートのデータ(5件)がfreeeに登録されました。


各部門の詳細画面です。

【まとめ】GAS×freeeAPIでスプレッドシートのデータをfreeeに登録する

この記事では、freeeAPIを使用したデータ登録の題材として「部門の作成」をしました。紹介したスクリプトの下記2つを変更することで、他の種類のデータ登録にも流用できます。

  • リクエストURL = APIエンドポイント + 個別URL + パラメータ
  • リクエストボディ = スプレッドシートにデータ(配列)を用意して、JSONデータに変換したもの

csvインポート機能を使わずワンクリックでfreeeにデータ登録できるので、同じ作業を定期的に実施する場合は、このようにGASでスクリプトを書いておくとよいでしょう。

請求書の受け取りはsweeepで自動化

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

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

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