![見出し画像](https://assets.st-note.com/production/uploads/images/91310784/rectangle_large_type_2_de50378549061f15b5784126bb00595e.jpeg?width=800)
[GAS][Notion]GoogleスプレッドシートからNotionのDBにデータを追加
Googleスプレッドシートに入力したデータをそのまま転用して、Notionのデータベースにデータを追加したいと思いつきました。
NotionはAPIが公開されているのでGoogle Apps Scriptを用いてツールを作ることが出来るようです。
以下のNotionデータベース「会議実績リスト」を例にします。
![](https://assets.st-note.com/img/1668847691506-E1INoNffwM.png?width=800)
以下のスプレッドシートに入力した内容をNotionDBに追加していきます。
![](https://assets.st-note.com/img/1668834055738-lBfJiAL87I.png)
Notion側の事前準備も含めて手順を記します。
1_新規インテグレーション作成→トークン取得
2_コネクトの追加&データベースID取得
3_スクリプトプロパティにデータベースIDとトークンを格納
4_GASのスクリプト
5_GAS実行
※Notion事前準備はこちらの記事を参考にさせていただきました。
ありがとうございます!
1_新規インテグレーション作成→トークン取得
Notion内のページ「私のインテグレーション」より「新しいインテグレーション」押下
![](https://assets.st-note.com/img/1668835033860-aYZU0hca2G.png?width=800)
「基本情報」にて「インテグレーション名」を入力、ワークスペースを選択し「送信」押下
![](https://assets.st-note.com/img/1668844351362-N1rWkHHHL4.png?width=800)
トークンの「表示」を押下後トークンをコピー(後程GASのスクリプトプロパティに格納します)
![](https://assets.st-note.com/img/1668844448612-jl5Mx5Omja.png?width=800)
以上でこのページでの作業は完了です。
![](https://assets.st-note.com/img/1668844591509-yaJoB95tVo.png?width=800)
2_コネクトの追加&データベースID取得
次に、連携したいNotionを開きコネクトを追加します。
右上の三点リーダから「コネクトを追加」→先ほど新規作成したインテグレーションを選択し追加
![](https://assets.st-note.com/img/1668844764408-ETaaMMtrCl.png?width=800)
また、連携したいNotionページのURLよりデータベースIDをコピーします。
URLのうち「スラッシュ」~「?v=」までの文字列が「データベースID」です。(下記のURLで言うと「aaaaaaaaa」の部分)
https://www.notion.so/aaaaaaaaa?v=bbbbbbbb
このデータベースIDもGASのスクリプトプロパティに格納します。
3_スクリプトプロパティにデータベースIDとトークンを格納
GASの「プロジェクトの設定」(歯車アイコン)より、スクリプトプロパティにデータベースIDとトークンを格納します。
![](https://assets.st-note.com/img/1668846953070-2Pclu1pkzx.png?width=800)
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のデータベースに新規データが追加され、スプレッドシート上の値がそれぞれの列に入力されます。
![](https://assets.st-note.com/img/1668847919769-q6iRZ3LNTZ.png?width=800)
NotionのUIは非常にわかりやすく入力も容易ですが、すでにスプレッドシート上にデータがあるのであればGASとNotioAPIを用いて転記することが出来とても便利です。
こはた先生のこの新着記事もおススメです!すごい!
※類似の記事を書きました。
この記事が気に入ったらサポートをしてみませんか?