見出し画像

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

以前、「GoogleスプレッドシートからNotionのDBにデータを追加する」という記事を書きました。

その際はGoogleスプレッドシートでの入力スタイルを以下のようにしておりました(列Bにデータを入力)が、

下記のようなテーブル構造のデータを都度転記したい、ということもあるかと思います。

スクリプトはこちら。

function addDataToNotion02() {

  //スクリプトプロパティに格納したデータベース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';

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

  for (let i = 2; i <= lastRow; i++) {

    const flag = sheet.getRange(i, 8).getValue();

    //列H「Notion転記済み」チェックボックスが「オフ」ならNotionDBに追加
    if (!flag) {

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


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

      UrlFetchApp.fetch(apiUrl, options);

      sheet.getRange(i, 8).check();//列H「Notion転記済み」チェックボックスをオンにする
    }
  }

  //最終行の次の行の7-8列目に空のチェックボックスを追加
  sheet.getRange(lastRow + 1, 7, 1, 2).insertCheckboxes();

}

入力するGoogleスプレッドシート側の列Hに「Notion転記済み」チェックボックスを設け、ここが「オフ」ならNotionDBに追加するという構造にしています。

スクリプトを実行すると、Notionのデータベースに1行追加されました。

Googleスプレッドシート側は転記した行の列H「Notion転記済み」にチェックが入ります。

また次回の新規データ入力の手間を軽減するため、insertCheckboxesメソッドを用いて最終行の次の行の列G-Hに空のチェックボックスを追加する制御を実装しております。
(この運用に関してはそれぞれの状況に応じて適宜アレンジされた方が良いかと思います。)


本記事は「#仕事について話そう」に応募させていただきました。
Google Apps Scriptは業務の効率化・自動化ができる便利なツールです。
本記事が多くのみなさまの業務効率化の一助になれば幸いです。


この記事が参加している募集

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