見出し画像

[GAS][Notion]GoogleスプレッドシートからNotionのDBにデータを追加

Googleスプレッドシートに入力したデータをそのまま転用して、Notionのデータベースにデータを追加したいと思いつきました。
NotionはAPIが公開されているのでGoogle Apps Scriptを用いてツールを作ることが出来るようです。

以下のNotionデータベース「会議実績リスト」を例にします。

以下のスプレッドシートに入力した内容をNotionDBに追加していきます。

Notion側の事前準備も含めて手順を記します。

1_新規インテグレーション作成→トークン取得
2_コネクトの追加&データベースID取得
3_スクリプトプロパティにデータベースIDとトークンを格納
4_GASのスクリプト
5_GAS実行

※Notion事前準備はこちらの記事を参考にさせていただきました。
ありがとうございます!


1_新規インテグレーション作成→トークン取得

Notion内のページ「私のインテグレーション」より「新しいインテグレーション」押下

「基本情報」にて「インテグレーション名」を入力、ワークスペースを選択し「送信」押下

トークンの「表示」を押下後トークンをコピー(後程GASのスクリプトプロパティに格納します)

以上でこのページでの作業は完了です。

2_コネクトの追加&データベースID取得

次に、連携したいNotionを開きコネクトを追加します。

右上の三点リーダから「コネクトを追加」→先ほど新規作成したインテグレーションを選択し追加

また、連携したいNotionページのURLよりデータベースIDをコピーします。
URLのうち「スラッシュ」~「?v=」までの文字列が「データベースID」です。(下記のURLで言うと「aaaaaaaaa」の部分)

https://www.notion.so/aaaaaaaaa?v=bbbbbbbb

このデータベースIDもGASのスクリプトプロパティに格納します。

3_スクリプトプロパティにデータベースIDとトークンを格納

GASの「プロジェクトの設定」(歯車アイコン)より、スクリプトプロパティにデータベースIDとトークンを格納します。

4_GASのスクリプト

スクリプトはこちら。

function addDataToNotion() {

  //スクリプトプロパティに格納したデータベースID、トークンを取得
  const props  = PropertiesService.getScriptProperties();
  const dbId   = props.getProperty('NOTION_DB_ID');
  const token  = props.getProperty('NOTION_TOKEN');

  const apiUrl = 'https://api.notion.com/v1/pages';

  //データベースIDを渡しオブジェクトを生成
  const obj = generateObj(dbId);

  //NotionAPIにポストしデータを追加
  const options = {
    method: "POST",
    headers: {
      "Content-type": "application/json",
      "Authorization": "Bearer " + token,
      "Notion-Version": '2022-06-28',
    },
    payload: JSON.stringify(obj),
  };

  UrlFetchApp.fetch(apiUrl, options);

}


function generateObj(dbId) {

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('入力用シート');

  //シートに入力された値を取得
  const date       = Utilities.formatDate(new Date(sheet.getRange(1, 2).getValue()), "Asia/Tokyo", "yyyy-MM-dd");
  const mtgName    = sheet.getRange(2, 2).getValue();
  const mtgRoom    = sheet.getRange(3, 2).getValue();
  const members    = sheet.getRange(4, 2).getValue();
  const minutesUrl = sheet.getRange(5, 2).getValue();
  const category   = sheet.getRange(6, 2).getValue();
  const taskCheck  = sheet.getRange(7, 2).getValue();

  //オブジェクトの生成
  const pageObj = {

    parent: {
      database_id: dbId,
    },
    properties: {

      "日付": {
        "date": {
          "start": date,
          "end": null
        }
      },
      "会議名": {
        "title": [{
          "text": {
            "content": mtgName
          }
        }]
      },
      "会議場所": {
        "rich_text": [{
          "text": {
            "content": mtgRoom
          }
        }]
      },
      "参加者": {
        "rich_text": [{
          "text": {
            "content": members
          }
        }]
      },
      "議事録URL": {
        "url": minutesUrl
      },
      "会議種別": {
        "select":
        {
          "name": category
        }
      },
      "残タスク有り": {
        "checkbox": taskCheck
      }
    }
  }

  return pageObj;

}

今回のサンプルではプロパティが6種類(Date、TItle、Rich text、URL、Select、Checkbox)でしたが、Notionのプロパティごとにオブジェクトの記法があるようです。
公式リファレンスはこちら。

また「Notion-Version」も随時変更されるようですので、公式サイトより随時ご確認ください。

5_GAS実行

GASを実行すると、Notionのデータベースに新規データが追加され、スプレッドシート上の値がそれぞれの列に入力されます。

NotionのUIは非常にわかりやすく入力も容易ですが、すでにスプレッドシート上にデータがあるのであればGASとNotioAPIを用いて転記することが出来とても便利です。

こはた先生のこの新着記事もおススメです!すごい!

※類似の記事を書きました。


この記事が気に入ったらサポートをしてみませんか?