質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1747閲覧

【GAS】スプレッドシート上で行が追加されたらNotion側にデータを追加。

bassmyryo

総合スコア13

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

2クリップ

投稿2023/09/02 05:43

編集2023/09/03 13:33

実現したいこと

スプレッドシート上で行が追加された場合にNotionのデータベースに新しくデータを作成されるようにしたいです。

前提

Notion APIの設定などは完了しており、手動で追加するコードは問題なく実行ができ、Notion側に追加されています。
GASは下記のコードで作成をし、トリガーで編集時に動作するように設定をしています。
編集時にGASの実行数のところでは完了になっており、エラーは発生していません。

シートには
B列に会社名
C列に氏名
が入っており、C列の新しいデータの追加をトリガーに動作するようにしたい。

発生している問題・エラーメッセージ

スプレッドシート側に行を追加しても、スクリプトは実行されているようなのですが、Notion側に情報が追加されません。
エラーメッセージの表記も特にありません。

該当のソースコード

GAS

1function onEdit(e) { 2 var ss = e.source; 3 var sheet = ss.getSheetByName('顧客管理表'); 4 var range = e.range; 5 console.log(range.getA1Notation()); 6 var column = range.getColumn(); 7 8 // C列に新しい行が追加された場合のみ実行 9 if (sheet.getName() === '顧客管理表' && column === 3) { 10 var notionToken = 'secret_CZMxBXYc2F4AhXMmgdxgMxYNMAKdoWfvtXYVJDVe7dB'; 11 var databaseId = 'dbc3883c8314424daa52d2f9b173556a'; 12 13 var companyName = sheet.getRange(range.getRow(), 2).getValue(); 14 var fullName = sheet.getRange(range.getRow(), 3).getValue(); 15 16 var pageProperties = { 17 "parent": { 18 "database_id": databaseId 19 }, 20 "properties": { 21 "title": [ 22 { 23 "text": { 24 "content": companyName + ' ' + fullName 25 } 26 } 27 ] 28 } 29 }; 30 31 var notionUrl = 'https://api.notion.com/v1/pages'; 32 var headers = { 33 'Authorization': 'Bearer ' + notionToken, 34 'Content-Type': 'application/json', 35 'Notion-Version': '2021-08-16' 36 }; 37 38 var options = { 39 'method': 'post', 40 'headers': headers, 41 'payload': JSON.stringify(pageProperties) 42 }; 43 44 //var response = UrlFetchApp.fetch(notionUrl, options); 45 //Logger.log(response.getContentText()); 46 } 47} 48 49 50 51 52

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2023/09/02 05:54

実行数のログにLogger.logの表示もないなら if文でfalseになっているのではないでしょうか?
bassmyryo

2023/09/02 06:23

ご回答ありがとうございます。 ログでは下記の様に表示されています。 この実行に関するログはありません 最近の実行に関するログの取得で、遅延が発生している可能性があります。 GASの全くの初心者で恐縮なのですが、どのようにすれば改善するのかアドバイスいただけますと幸いです。
YellowGreen

2023/09/02 22:26 編集

var range = e.range; の後に console.log(range.getA1Notation()); を追加すると実行数のログにセル範囲が表示されます。 表示された値がA列のA2以降の行のセルになっているかをご確認ください。 完了の実行ログかあるのに値が表示されないときは、ブラウザをリロードしたり右下の更新をクリックするなりしてみてください。
bassmyryo

2023/09/03 05:53

ご回答ありがとうございます。 該当コードを入れてみたところログで下記が出力されました。 デバッグ B10:C10 追加した行が表示されています。 ただ、Notionには相変わらず追加はされていない状態です。 これはGASの側には問題はなくNotion側の問題ということでしょうか?
YellowGreen

2023/09/03 06:06

スクリプトはA列の編集がないと処理を行わないようになってますから、それでいいのではないでしょうか?
bassmyryo

2023/09/03 13:34 編集

ありがとうございます。 前提条件の整理とご指摘いただいた内容を元にコードを修正してみましたが、エラーはでず、Notionには未だ追加されない状態です・・・ 原因は一体何なのでしょうか?・・・
YellowGreen

2023/09/03 15:44

44、45行がコメントアウトされているのは、関係ありますか?
bassmyryo

2023/09/04 02:29

問題の切り分けで色々コメントアウトしていた残骸です(・・;) コメントアウトしても、解除しても特にかわりがないです・・・
YellowGreen

2023/09/04 03:37 編集

コメントアウトを解除したときは、 スプレッドシートのC列にフルネームを記入した後に、 しばらく待ってから実行数のログを確認すると console.log(range.getA1Notation()); によってC列のセル名と Logger.log(response.getContentText()); によって送信結果のレスポンスが表示されませんか?
YellowGreen

2023/09/04 06:07 編集

もしかすると onEdit(e) { の簡易なトリガーなので 外部への送信ができないのかもしれません。 (※) 関数名をonEdit(e)以外の onEditCell(e) { などに変更して、 エディタのトリガー設定画面から スプレッドシートの「編集時」のトリガーを この関数に設定してみて試されてはいかがでしょうか。 (※追記) 追試してみました。 onEdit(e) { の場合は、 Exception: UrlFetchApp.fetch を呼び出す権限がありません。必要な権限: https://www.googleapis.com/auth/script.external_request というエラーがログに表示されて「失敗しました」というログが残るようです。 なので、ログに何も表示されていないということが不思議です。
bassmyryo

2023/09/04 06:21

下記を実行してみました。 1.実行数のログのコメントアウトを解除 2.関数名の変更 3.編集時のトリガーを再度設定 セルの追加をしてみたところログは デバッグ B1759:C1759 となっています。 Notionには相変わらず追加がされないです。 ネット上で他のNotionと連動する関数を試してみましたがそちらは問題なくNotion側に追加はできたので、 スプレッドシート→Notionに正しくデータが送られていない、APIやデータベースの指定が間違っているということはなさそうです。
bassmyryo

2023/09/04 06:31

問題の切り分けをするために、試しに他にトリガーを設定していたものを削除してみたところ動作しました! どうやらトリガーの"編集時"を2つにしていたのが問題のようです。 ただ、両方とも使用したいGASなのでどうしようかとかんがえたところ 一方のGASに作動の時間差を設けたところ解決しました!! 意外なことが原因でしたが解決しました。 お付き合いいただきありがとうございました!
guest

回答1

0

自己解決

解決方法

どうやらGASのトリガーで"編集時"が2つ以上あると1つ以外がエラーが出るようです。
そのため"編集時"のトリガーを複数使う場合は時差を設けると解決するようです。

GAS

1function onEditCell(e) { 2 var ss = e.source; 3 var sheet = ss.getSheetByName('顧客管理表'); 4 var range = e.range; 5 console.log(range.getA1Notation()); 6 var column = range.getColumn(); 7 8 // C列に新しい行が追加された場合のみ実行 9 if (sheet.getName() === '顧客管理表' && column === 3) { 10 // 10秒待機 11 Utilities.sleep(10000); // 単位はミリ秒なので、10秒は10000ミリ秒です。 12 13 var notionToken = 'secret_CZMxBXYc2F4AhXMmgdxgMxYNMAKdoWfvtXYVJDVe7dB'; 14 var databaseId = 'dbc3883c8314424daa52d2f9b173556a'; 15 16 var companyName = sheet.getRange(range.getRow(), 2).getValue(); 17 var fullName = sheet.getRange(range.getRow(), 3).getValue(); 18 19 var pageProperties = { 20 "parent": { 21 "database_id": databaseId 22 }, 23 "properties": { 24 "title": [ 25 { 26 "text": { 27 "content": companyName + ' ' + fullName 28 } 29 } 30 ] 31 } 32 }; 33 34 var notionUrl = 'https://api.notion.com/v1/pages'; 35 var headers = { 36 'Authorization': 'Bearer ' + notionToken, 37 'Content-Type': 'application/json', 38 'Notion-Version': '2022-06-28' 39 }; 40 41 var options = { 42 'method': 'post', 43 'headers': headers, 44 'payload': JSON.stringify(pageProperties) 45 }; 46 47 var response = UrlFetchApp.fetch(notionUrl, options); 48 Logger.log(response.getContentText()); 49 } 50} 51

投稿2023/09/04 06:34

bassmyryo

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問