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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

763閲覧

カレンダーのイベントが6つ作成されてしまう

Kodanosuke

総合スコア42

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/12/01 08:16

前提・実現したいこと

あるサイトから情報を取得し、その情報をもとにGoogleカレンダーでイベントを作成するコードを書いています。
カレンダーのイベントを作成するコードを実行すると同じ内容のイベントが6つも作成されてしまいます。
回避するにはどのようにしたらいいでしょうか。
ご教授いただけると幸いです。
よろしくお願いいたします。

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

特になし

該当のソースコード

Google

1function sendGameInfo() { 2 var url, mail; 3 var html; 4 var stadium 5 //翌翌週の日曜日の試合情報を取得するアドレスを設定する 6 var next2sun = getnext2Sunday() 7 var address = setAddress(next2sun) 8 9 //情報を取得 10 html = UrlFetchApp.fetch(address).getContentText("shift-jis"); 11 var parse = Parser.data(html); 12 var stadium_data = Parser.data(html).from('<tr class="schedule-index">').to('</tr>').iterate(); 13 var prestadium = stadium_data[0].replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'').replace(/\s+/g, ""); 14 var cut_posi = prestadium.search("(") 15 stadium = prestadium.slice(0,cut_posi) 16 var part1 = Parser.data(html).from('<td align="right" class="schedule-index">').to('</td>').iterate(); 17 var part2 = Parser.data(html).from('<td align="center" class="schedule-index">').to('</td>').iterate(); 18 var num = part1.length; 19 20 21 22 var kari 23 var list_time=[] 24 for (var ij=0;ij<num;ij++){ 25 26 kari = makeTime(part1[ij],next2sun) 27 list_time.push(kari) 28 29 } 30 31 var elements = arrangeGameInfo(part2) 32 elements['time'] = list_time[elements['flag']] 33 elements['location'] = stadium 34 //試合がないときは何も処理をしない 35 if(elements['flag']==-1){ 36 } 37 //試合があるときはカレンダーで連絡する 38 else if(elements['flag']!=-1){ 39 40 //スプレッドシートからメンバーの一覧を取得する 41 var ssheet,sheet,member 42 ssheet = SpreadsheetApp.getActiveSpreadsheet() 43 sheet = ssheet.getSheetByName('MemberList') 44 var range = sheet.getRange('C2:C').getValues() 45 member = Array.prototype.concat.apply([], range).filter(Boolean) 46 47 var c_title,c_startTime,c_endTime,competitor,body,options 48 c_title = "試合"+":"+elements['competition'] 49 c_startTime = new Date(new Date(elements['time']).setHours(new Date(elements['time']).getHours()-1)) 50 c_endTime = new Date(new Date(elements['time']).setHours(new Date(elements['time']).getHours()+2)) 51 52 if(elements['top_team'] == "チーム名"){ 53 54 competitor = elements['bot_team'] 55 56 }else if(elements['bot_team'] == "チーム名"){ 57 58 competitor = elements['top_team'] 59 60 } 61 62 body = "相手:"+competitor+"\n"+ 63 "ボール:"+elements['ball']+"\n"+ 64 "集合:"+Utilities.formatDate(c_startTime,"JST","HH:mm")+"\n"+ 65 "試合:"+elements['time'].substr(-5,5) 66 67 options = {guset:mail, 68 description:body, 69 location:stadium} 70 //ここで1回しか実行されないはずが6回実行されています。回避策を教えていただきたいです。 71 CalendarApp.getCalendarById("asics.com_n962uf6279chmgdajrbho682ug@group.calendar.google.com").createEvent(c_title, c_startTime, c_endTime, options) 72 73 } 74 Logger.log(elements) 75} 76

試したこと

同じタイトルのイベントが複数あった場合は1つを残して削除する、などのコードを試しましたがそもそもなぜこのようなことになるか知りたくて質問しました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

draq

2019/12/01 09:14

sendGameInfo が1度しか呼び出されていないことは確認されてますか。
Kodanosuke

2019/12/01 09:32

コメントありがとうございます。 それに関しては確認しております。 これをメイン関数にして実行しているので複数回は実行してきません。
macaron_xxx

2019/12/02 00:46

セミコロンがあったりなかったりするので、一度すべてのステートメントの最後にセミコロンをつけてみてください。
papinianus

2019/12/10 14:28

> これをメイン関数にして実行しているので複数回は実行してきません。 メイン関数にしている「ので」が理由になっていません。scriptをlockもしていないのになぜ実行できない、と言えるのですか? どうやって実行していますか?なんらかのトリガーではないですか?関数の実行ですか?であればデバッグボタンでデバッグして複数回実行されるか確認できませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問