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

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

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

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

Google カレンダー

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

6970閲覧

GASを使ってGoogleカレンダーからスプレッドシートに転記したい

laqua

総合スコア0

Google スプレッドシート

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

Google カレンダー

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2021/04/12 02:26

前提・実現したいこと

GASを使って複数人の1か月分のGoogleカレンダーの予定をスプレッドシートに移したい

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

エラー
Exception: Invalid argument
(匿名) @ コード.gs:7

ーーーーーーーーーーーーーーーーーーーーーーーーーーー 初めて質問させていただきます。 複数人のGoogleカレンダーをまとめてスプレッドシートに記載したいと思っています。 以下の記事を参考にさせていただきましたがうまくいきません。 <参考URL> https://bzbot.work/2019/02/21/gas-calendar-2/ 以下に私がやった手順を記載いたします。 ①シートの添付の画像のように複数人のIDを記載する。  このシートの名前は「シート1」にしています。 ![![イメージ説明](27dd4b49d0f4289930546dc6462410f0.png)](5ead7d4685f01d989b5027d68fa123de.png) ②以下のコードをスクリプトエディタに記載 //対象の日付を範囲指定 var date = '2021/01/01'; //アクティブなシートを取得 var sheet = SpreadsheetApp.getActiveSpreadsheet(); //「Calendar_ID」のシートをアクティブにして、シート情報をcalendarIdに取得 var calendarId = sheet.setActiveSheet(sheet.getSheetByName("Calendar_ID")); //「Calendar_Item」のシートをアクティブにして、シート情報をcalendarItemに取得 var calendarItem = sheet.setActiveSheet(sheet.getSheetByName("Calendar_Item")); function getId(){ //現在の入力されてる値を初期化 calendarItem.clear(); //ヘッダ行に入る値を指定(誤って削除しても都度指定) calendarItem.getRange('A'+(1)).setValue('カレンダーID'); calendarItem.getRange('B'+(1)).setValue('タイトル'); calendarItem.getRange('C'+(1)).setValue('開始時刻'); calendarItem.getRange('D'+(1)).setValue('終了時刻'); calendarItem.getRange('E'+(1)).setValue('所要時間'); calendarItem.getRange('F'+(1)).setValue('詳細'); calendarItem.getRange('G'+(1)).setValue('住所'); //CalendarIDが入っている最終行を取得(固定) var lastR1 = calendarId.getLastRow(); Logger.log("【lastR】:" + lastR1); //セットされているIDのリストを順番に取得してgetCalに引数として渡す for (var i = 1; i < lastR1 ; i++){ //予定表が入っている最終行を取得(可変) var lastR2 = calendarItem.getLastRow(); Logger.log("【lastR】:" + lastR2); //カレンダーIDを指定して、カレンダーを取得 var calId = calendarId.getRange('A'+(i+1)).getValue(); Logger.log('【calId】' + calId); getCal(calId,lastR2); } } function getCal(id,lastR) { Logger.log('【id】' + id); Logger.log('【lastR】' + lastR); var calendar = CalendarApp.getCalendarById(id); //この時はまだfrom,end両方に変数dateで指定した日付が入っている var from= new Date(date);  var end = new Date(date); //月を指定するときは必ず大文字のMMを指定します(半角mmだとminutesを指してしまう) //endのMonthm(月)に+1をして翌月を指定 end.setMonth(end.getMonth()+1); //getEventsで取得したいカレンダーの始まりと終わりを指定 var events = calendar.getEvents(from, end); //eventsに入っている要素の数だけ実行 for (var i = 0; i < events.length; i++) { Logger.log('events要素' + i + '目'); var title = events[i].getTitle(); var startTime = events[i].getStartTime(); var endTime = events[i].getEndTime(); var duration = (endTime - startTime) /(1000*60)/(60); var detail = events[i].getDescription(); var location = events[i].getLocation(); //取得した値をスプレッドシートに反映 calendarItem.getRange('A'+(lastR+1)).setValue(id); calendarItem.getRange('B'+(lastR+1)).setValue(title); calendarItem.getRange('C'+(lastR+1)).setValue(startTime).setNumberFormat('yyyy/mm/dd hh:mm'); calendarItem.getRange('D'+(lastR+1)).setValue(endTime).setNumberFormat('yyyy/mm/dd hh:mm'); calendarItem.getRange('E'+(lastR+1)).setValue(duration); //calendarItem.getRange('E'+(lastR+1)).setValue(detail); calendarItem.getRange('G'+(lastR+1)).setValue(location); lastR = lastR + 1; } } ③実行を推すと上に記載のあるエラーコードが出ました。 お答えいただけますと幸いです。 よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

エラーの原因は、Calendar_IDと言う名前のシートが無いからでしょう。
引用元ではシート1ではなくCalendar_IDになっています

と言っても解決はしない気がします

引用元のコードをそのまま貼り付けてうまく行かないから質問された印象があります。
引用元のコードを理解しようとする所から始めた方が良いかと思います。

勝手な印象で間違っていたらすみません。

投稿2021/04/12 03:29

編集2021/04/12 03:31
xail2222

総合スコア1497

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

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

laqua

2021/04/12 03:33

ご回答ありがとうございます。 回答の通りシート1の名前をCalendar_IDに変更いたしましたが反映されません。 他にどの部分を変更したほうがよろしいでしょうか? よろしくお願いいたします。
xail2222

2021/04/12 03:55 編集

まずはコードで意味の分からない部分はありませんか? 修正すべき点がどれだけあるかは、コードだけでは不明です。 あとエラーの行番号は、変更になりましたでしょうか? 変更になっていれば、一つは問題が解消されたことになります
laqua

2021/04/13 08:41 編集

すいません。コードに関しては無知なので理解している最中でございます。。。。 わからないがわからない状態なのでいったん調べます。 エラーコードは以下のようになりました。 よろしくお願いいたします。 ーーーーーーーーーーーーーーーーーーー エラー Exception: Invalid argument (匿名) @ 無題.gs:8 ーーーーーーーーーーーーーーーーーーー
xail2222

2021/04/13 13:45

とりあえず7から8になったようですね。 一応そのエラーは、多分 「sheet.getSheetByName("Calendar_Item")」の所でしょう。 getSheetByName=名前でシートを取得 という処理ですね。 で、どういう名前でシートを取得しようとしているのかと言うと "Calendar_Item"ですね。 つまり"Calendar_Item"という名前のシートがないと その処理はちゃんと動かない。ということになります。 すべき対処は、"Calendar_Item"という名前のシートの追加ですね。 さて、その次は 「var calendar = CalendarApp.getCalendarById(id);」でエラーが出るのでしょうか。 どうなのでしょうか。謎ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問