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

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

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

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

Google カレンダー

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

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

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

Q&A

解決済

3回答

3091閲覧

スプレッドシートからGoogleカレンダーへ時限式で自動追加したい

nezumimuzen

総合スコア19

Google スプレッドシート

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

Google カレンダー

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

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

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

0グッド

0クリップ

投稿2020/07/01 10:03

前提・実現したいこと

GASを使ってスプレッドシートからGoogleカレンダーへスケジュールの時限式で自動追加をしたいと思っています。
現在下記サイトを参考にしながらコードを作っていますが、正しく機能しないためどこがいけないのかを教えていただきたいです。
時限稼働はGoogle App Scriptのタイマーから行う予定です。

参考元:https://www.whizz-tech.co.jp/3996/

シート名(スケジュール)

|連携|日にち|開始時間|終了時間|タイトル|説明|
|:--|:--:|--:|
||2020年7月3日|19:00|22:00|食事|友人と食事|

上記シートをもとにGoogleカレンダーに追加をしようとしています


また下記のような表の時に
|連携|日にち|開始時間|終了時間|タイトル|説明|重要度|
|:--|:--:|--:|
||2020年7月3日|19:00|22:00|食事|友人と食事|1|

重要度が1ならスケジュールの色を青に2なら赤になど設定する方法がありましたら是非ご教授願います。

該当のソースコード

javaScript

1function createSchedule() { 2 3 // 連携するアカウント 4 const gAccount = "xxxxx@gmail.com"; // ★★ここに連携するカレンダーのアドレスを入れる 5 6 7 // 読み取り範囲(表の始まり行と終わり列) 8 const topRow = 2; 9 const lastCol = 7; 10 11 // 0始まりで列を指定しておく 12 const statusCellNum = 0; 13 const dayCellNum = 1; 14 const startCellNum = 2; 15 const endCellNum = 3; 16 const titleCellNum = 4; 17 const descriptionCellNum = 5; 18 const PriorityCellNum = 6; 19 20 // シートを取得 21 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 22 23 // シート名を記入。 24 var objSheet = objSpreadsheet.getSheetByName("カレンダー追加");  25 var sheet = SpreadsheetApp.setActiveSheet(objSheet); 26 27 28 // 予定の最終行を取得 29 var lastRow = sheet.getLastRow(); 30 31 //予定の一覧を取得 32 var contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues(); 33 34 // googleカレンダーの取得 35 var calender = CalendarApp.getCalendarById(gAccount); 36 37 //順に予定を作成(今回は正しい値が来ることを想定) 38 for (i = 0; i <= lastRow - topRow; i++) { 39 40 //「済」っぽいのか、空の場合は飛ばす 41 var status = contents[i][statusCellNum]; 42 if ( 43 status == "済" || 44 status == "済み" || 45 status == "OK" || 46 contents[i][dayCellNum] == "" 47 ) { 48 continue; 49 } 50 51 // 値をセット 日時はフォーマットして保持 52 var day = new Date(contents[i][dayCellNum]); 53 var startTime = contents[i][startCellNum]; 54 var endTime = contents[i][endCellNum]; 55 var title = contents[i][titleCellNum]; 56 // 場所と詳細をセット 57 var options = {description: contents[i][descriptionCellNum]}; 58 59 try { 60 // 開始終了が無ければ終日で設定 61 if (startTime == '' || endTime == '') { 62 //予定を作成 63 calender.createAllDayEvent( 64 title, 65 new Date(day), 66 options 67 ); 68 69 // 開始終了時間があれば範囲で設定 70 } else { 71 // 開始日時をフォーマット 72 var startDate = new Date(day); 73 startDate.setHours(startTime.getHours()) 74 startDate.setMinutes(startTime.getMinutes()); 75 // 終了日時をフォーマット 76 var endDate = new Date(day); 77 endDate.setHours(endTime.getHours()) 78 endDate.setMinutes(endTime.getMinutes()); 79 // 予定を作成 80 calender.createEvent( 81 title, 82 startDate, 83 endDate, 84 options 85 ); 86 } 87 88 //無事に予定が作成されたら「済」にする 89 sheet.getRange(topRow + i, 1).setValue("済"); 90 91 // エラーの場合(今回はログ出力のみ) 92 } catch(e) { 93 Logger.log(e); 94 } 95 96 } 97 98}

試したこと

実行してもGoogleカレンダーには何も追加されずエラーメッセージも出ないため私の知識ではお手上げです。。。

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

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

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

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

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

guest

回答3

0

下記の表とコードで希望していた内容に動作しました!
スケジュールの色分けはsetColorで行うと他のすべての予定の色も変わってしまうみたいだったので、別のカレンダーに仕事用プライベート用と分け、仕事用なら「1」を入れて対応しました。
asahina1979さん、情報提供とご指摘ありがとうございました!

|タイムスタンプ|タイトル||予定日|開始時間|説明|ログ|反映|
|:--|:--:|--:|
||||

javaScript

1/* 指定月のカレンダーからイベントを取得する */ 2function addTaskEvents() { 3 4 var myCal1 = CalendarApp.getCalendarById('xxxxxxxx@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 5 var myCal2 = CalendarApp.getCalendarById('aaaaaaaa@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 6 7 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 8 var mySheet = objSpreadsheet.getSheetByName("スケジュール");  9 var dat = mySheet.getDataRange().getValues(); //シートデータを取得 10 11 for(var i=1;i<dat.length;i++){ 12 if(dat[i][6] == ""){ 13 14 /* 日時をセット */ 15 var evtDate = new Date(dat[i][3]); 16 var evtTime = new Date(dat[i][4]); 17 evtDate.setHours(evtTime.getHours()); 18 evtDate.setMinutes(evtTime.getMinutes()); 19 20 var options = {description: dat[i][5]}; 21 var Priority = dat[i][2] 22 23 /* イベントの追加・スプレッドシートへの入力 */ 24 if(Priority == "1"){ 25 var myEvt = myCal1.createEvent(dat[i][1],evtDate,evtDate,options); //カレンダーにタスクをイベントとして追加 26 }else{ 27 var myEvt = myCal2.createEvent(dat[i][1],evtDate,evtDate,options); //カレンダーにタスクをイベントとして追加 28 } 29 30 dat[i][6]=myEvt.getId(); //イベントIDを入力 31 dat[i][7]='済'; 32 } 33 } 34 mySheet.getRange(1,1,i,8).setValues(dat); //データをシートに出力 35}

投稿2020/07/02 14:14

nezumimuzen

総合スコア19

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

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

0

自己解決

下記の表とコードで希望していた内容に動作しました!
スケジュールの色分けはsetColorで行うと他のすべての予定の色も変わってしまうみたいだったので、別のカレンダーに仕事用プライベート用と分け、仕事用なら「1」を入れて対応しました。
asahina1979さん、情報提供とご指摘ありがとうございました!

|タイムスタンプ|タイトル||予定日|開始時間|説明|ログ|反映|
|:--|:--:|--:|
||||

javaScript

1/* 指定月のカレンダーからイベントを取得する */ 2function addTaskEvents() { 3 4 var myCal1 = CalendarApp.getCalendarById('xxxxxxxx@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 5 var myCal2 = CalendarApp.getCalendarById('aaaaaaaa@group.calendar.google.com'); //カレンダーIDでカレンダーを取得 6 7 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 8 var mySheet = objSpreadsheet.getSheetByName("スケジュール");  9 var dat = mySheet.getDataRange().getValues(); //シートデータを取得 10 11 for(var i=1;i<dat.length;i++){ 12 if(dat[i][6] == ""){ 13 14 /* 日時をセット */ 15 var evtDate = new Date(dat[i][3]); 16 var evtTime = new Date(dat[i][4]); 17 evtDate.setHours(evtTime.getHours()); 18 evtDate.setMinutes(evtTime.getMinutes()); 19 20 var options = {description: dat[i][5]}; 21 var Priority = dat[i][2] 22 23 /* イベントの追加・スプレッドシートへの入力 */ 24 if(Priority == "1"){ 25 var myEvt = myCal1.createEvent(dat[i][1],evtDate,evtDate,options); //カレンダーにタスクをイベントとして追加 26 }else{ 27 var myEvt = myCal2.createEvent(dat[i][1],evtDate,evtDate,options); //カレンダーにタスクをイベントとして追加 28 } 29 30 dat[i][6]=myEvt.getId(); //イベントIDを入力 31 dat[i][7]='済'; 32 } 33 } 34 mySheet.getRange(1,1,i,8).setValues(dat); //データをシートに出力 35}

投稿2020/07/01 19:07

nezumimuzen

総合スコア19

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

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

0

カラーの話

setColor なるものがあるから設定したら?

https://developers.google.com/apps-script/reference/calendar/calendar

実行されない話

とりあえず、ログ等増やしてどこでスキップ判定されてるか確認しよう。
質問者の問題確認のために自分用に作る人は少ない

投稿2020/07/01 10:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問