実現したいこと
スプレッドシート上で行が追加された場合に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
実行数のログにLogger.logの表示もないなら
if文でfalseになっているのではないでしょうか?
ご回答ありがとうございます。
ログでは下記の様に表示されています。
この実行に関するログはありません
最近の実行に関するログの取得で、遅延が発生している可能性があります。
GASの全くの初心者で恐縮なのですが、どのようにすれば改善するのかアドバイスいただけますと幸いです。
var range = e.range;
の後に
console.log(range.getA1Notation());
を追加すると実行数のログにセル範囲が表示されます。
表示された値がA列のA2以降の行のセルになっているかをご確認ください。
完了の実行ログかあるのに値が表示されないときは、ブラウザをリロードしたり右下の更新をクリックするなりしてみてください。
ご回答ありがとうございます。
該当コードを入れてみたところログで下記が出力されました。
デバッグ B10:C10
追加した行が表示されています。
ただ、Notionには相変わらず追加はされていない状態です。
これはGASの側には問題はなくNotion側の問題ということでしょうか?
スクリプトはA列の編集がないと処理を行わないようになってますから、それでいいのではないでしょうか?
ありがとうございます。
前提条件の整理とご指摘いただいた内容を元にコードを修正してみましたが、エラーはでず、Notionには未だ追加されない状態です・・・
原因は一体何なのでしょうか?・・・
44、45行がコメントアウトされているのは、関係ありますか?
問題の切り分けで色々コメントアウトしていた残骸です(・・;)
コメントアウトしても、解除しても特にかわりがないです・・・
コメントアウトを解除したときは、
スプレッドシートのC列にフルネームを記入した後に、
しばらく待ってから実行数のログを確認すると
console.log(range.getA1Notation());
によってC列のセル名と
Logger.log(response.getContentText());
によって送信結果のレスポンスが表示されませんか?
もしかすると
onEdit(e) {
の簡易なトリガーなので
外部への送信ができないのかもしれません。
(※)
関数名をonEdit(e)以外の
onEditCell(e) {
などに変更して、
エディタのトリガー設定画面から
スプレッドシートの「編集時」のトリガーを
この関数に設定してみて試されてはいかがでしょうか。
(※追記)
追試してみました。
onEdit(e) {
の場合は、
Exception: UrlFetchApp.fetch を呼び出す権限がありません。必要な権限: https://www.googleapis.com/auth/script.external_request
というエラーがログに表示されて「失敗しました」というログが残るようです。
なので、ログに何も表示されていないということが不思議です。
下記を実行してみました。
1.実行数のログのコメントアウトを解除
2.関数名の変更
3.編集時のトリガーを再度設定
セルの追加をしてみたところログは
デバッグ B1759:C1759
となっています。
Notionには相変わらず追加がされないです。
ネット上で他のNotionと連動する関数を試してみましたがそちらは問題なくNotion側に追加はできたので、
スプレッドシート→Notionに正しくデータが送られていない、APIやデータベースの指定が間違っているということはなさそうです。
問題の切り分けをするために、試しに他にトリガーを設定していたものを削除してみたところ動作しました!
どうやらトリガーの"編集時"を2つにしていたのが問題のようです。
ただ、両方とも使用したいGASなのでどうしようかとかんがえたところ
一方のGASに作動の時間差を設けたところ解決しました!!
意外なことが原因でしたが解決しました。
お付き合いいただきありがとうございました!
回答1件
あなたの回答
tips
プレビュー