LoginSignup
3
3

スプレッドシートをnotionデータベースに転記する

Last updated at Posted at 2024-02-16

ゴール

スプレッドシートで作成した一覧(機能一覧やタスク一覧など)をnotionへ連携する

前提

・Googleアカウントを作成している
・スプレッドシートを作成している
・notionにデータベースを作成している
・スプレッドシートとnotionは列定義を揃えておいた方が扱いやすいと思います

1.実装

Notion側での作業

作業1.APIキーを取得する

1.左上の歯車マークの「設定」をクリック
2.ダイアログ左下の「コネクト」をクリック
3.下部の「インテグレーションを作成または管理する」をクリック
4.新しいインテグレーションをクリックし、必要項目を入力
*注: ワークスペースのオーナーのみ作成可能です。
*注: この時につけた名前がレコードの作成者になります。
5.作成したインテーグレーションをクリックするとシークレットというタブにAPIキーが取得できます。
6.どこかにメモしておきましょう。

作業2.データベースのURLを取得する

1.Notionのデータベースの横に3点リーダーがあるのでクリック。
2.リンクをコピーをクリックしどこかにメモしておきましょう。

作業3.データベースにコネクトを追加

1.連携先になるデータベースをクリック。
2.右上の3点リーダーをクリック。
3.接続先を追加から作業1で選択した接続先を選択し追加します。
これしないと、APIからデータベースにアクセスできずエラーになりますので注意

スプレッドシート側での作業

作業1.GASプロジェクトを作成する

1.スプレッドシート上部の「拡張機能」をクリック
2.「Apps Script」をクリック
3.別タブで開くコードエディタを確認
4.コード.gsというファイルがある(はずな)ので、下記のプログラムを記載します。

作業2.GASでプログラムを作成する

1.下記にGASプログラムのサンプルを記載しているので貼り付け
2.APIキーとデータベースのURLを上記のNotion側の作業で取得したものへ変更
APIキーやURLはベタ書きでなく環境変数を使うのがよいですが、
ひとまず、使わない手順としています。

コード.gs
function sendDataToNotion() {
  // NotionAPIキー *Notion側の作業1で取得したもの
  const notionApiKey = "YOUR_NOTION_API_KEY";
  
  // NotionのデータベースのURL *Notion側の作業2で取得したもの
  const notionDatabaseUrl = "YOUR_NOTION_DATABASE_URL";

  // スプレッドシートのデータを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getRange('A1:C10'); // データの範囲を適切なものに変更する
  const data = dataRange.getValues();

  // Notionにデータを送信
  const notionDatabaseId = extractDatabaseIdFromUrl(notionDatabaseUrl);
  for (let i = 0; i < data.length; i++) {
    let rowData = data[i];
    sendDataToNotionDatabase(notionApiKey, notionDatabaseId, rowData);
  }
}

// NotionのデータベースのIDを取得
function extractDatabaseIdFromUrl(url) {
  const matches = url.match(/\/(\w{32})\?/);
  return matches ? matches[1] : null;
}

// Notionのデータベースにデータを送信
function sendDataToNotionDatabase(apiKey, databaseId, rowData) {
  const url = "https://api.notion.com/v1/pages";
  const headers = {
    "Authorization": "Bearer " + apiKey,
    "Content-Type": "application/json",
    "Notion-Version": "2021-05-13"
  };

  const payload = {
    "parent": { "database_id": databaseId },
    "properties": {
      // ここにスプレッドシートの列に対応するデータを追加してください
      "列名1": { "title": [{ "text": { "content": rowData[1] }}] }, //必須
      "列名2": { "rich_text": [{ "text": { "content": rowData[2] }}] },
      "ステータス": { "select": { "name": "未完了"} }, // プルダウン
      "タグ": { "multi_select": [{ "name": "チーム1"},{"name":"チーム2"}] } // タグ
    }
  };

  const options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify(payload)
  };

  UrlFetchApp.fetch(url, options);
}

2.実行

GASのプログラムを実行しましょう。
*既存のデータベースにデータを連携する場合は、テスト用のデータベースを作成し、想定通りの連携ができるかどうかを確認されることをお勧めします。

関数を実行

1.コードエディタの上部の実行する関数を選択するプルダウンで「sendDataToNotion」を選択
2.コードエディタの上部の「実行」をクリック
3.初回のみ「承認が必要」のダイアログが出るので、許可しましょう。

参考

Notion APIによる連携

Notion APIの呼び出しには、明示的にNotionのVersionをHeaderをつけることを推奨しているそうです

Notion APIからレコードを登録する際のPayload定義の参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3