• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Google Apps Scriptについて)

Google Apps Script初心者のための自動予定登録の方法

このQ&Aのポイント
  • Google Apps Scriptを使って自動的に予定を登録する方法について教えてください。
  • 現在はgoocalproxyというサービスを使用していましたが、機能しなくなったため、Google Apps Scriptを使うことにしました。
  • 具体的なコードの例や使い方について詳しく教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

何が分からないのか伝わってきません。何が分からないのかを具体的に書かないと適切な回答がつく可能性は低くなりますよ。 もしも、何が分からないか具体的には自分でも分からない状態ということなら、何が分からないか自分でよく考えた方がいいと思います。 サンプルを適用するというだけなら、 cal.createAllDayEvent(str,dd,{description:body}); を cal.createEvent('歯医者', new Date('2012/3/12 18:00:00'), new Date('2012/3/12 20:00:00')); } とすればいいだけなんじゃないの?と思いますが。違うんでしょうか?知りたいことはそういうことじゃないの?

baguo
質問者

お礼

ご指摘頂きこちらで再度色々勉強してみました。 コードの意味は全くと言っていいほどわからないのですが、試行錯誤の結果、下記のようなコードで希望通りの結果を得ることが出来ました。ありがとうございました。 function setCalLab(){ var thds = GmailApp.getInboxThreads(); var calName = "本日の予定"; var cals = CalendarApp.getCalendarsByName(calName); for(var n in thds){ var thd = thds[n]; var subject = thd.getFirstMessageSubject(); var msgs = thd.getMessages(); if (subject.indexOf("本日の予定",0) != -1){ //label.addToThread(thd); //for(var m in msgs){ var msg = msgs[0]; var body = msg.getPlainBody(); var str = msg.getSubject(); var res = str.match(/\d+/g); var cal = cals[0]; var d1 = new Date(); var yy = d1.getFullYear(); cal.createEvent(str,new Date(yy,res[0]-1,res[1],res[2],res[3]),new Date(yy,res[0]-1,res[1],res[4],res[5]),{description:body}); //} GmailApp.moveThreadToArchive(thd); } } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • google apps scriptについて

    google apps scriptに関しては全くの初心者ですので、どなたかお力をお貸しください。 現在、Accessでシステムを作っているのですが、システムに新規案件が登録されると自動でグーグルカレンダーにも登録されるようにしています。 具体的には、システムに新規案件が登録されたタイミングで件名を「★マーク+タイトル+日付+時間」、内容に案件詳細を入れたメールをgmailに送り、google apps scriptのトリガーで一定間隔でメールを検索し、件名に★マールの入ったメールがあれば件名に入っている日付・時間でカレンダーに内容を登録するようになっています。 そこで質問なのですが、今度はシステムより同じ内容のメールを送り、そのメール内容と同じものがカレンダーで見つかるとその予定を削除するようなgoogle apps scriptを作りたいのです。 メールのサンプルとgoogle apps scriptのコードは下記のようになっています。 全くの初心者でコードもネットを色々調べて書いたのであまり内容も理解できていません。 どなたか宜しくお願い致します。 メールサンプル 件名: ★取引先と打合せ 2015/08/02_16:00-18:00 内容: 管理NO 9016 2015/08/02 16:00-18:00 発注担当者:様 場所:事務所 登録日:2015/06/19/11:51 コード function setCalLab(){ var thds = GmailApp.getInboxThreads(); var calName = "メールアドレス@gmail.com"; var cals = CalendarApp.getCalendarsByName(calName); for(var n in thds){ var thd = thds[n]; var subject = thd.getFirstMessageSubject(); var msgs = thd.getMessages(); if (subject.indexOf("★",0) != -1){ //label.addToThread(thd); //for(var m in msgs){ var msg = msgs[0]; var body = msg.getPlainBody(); var str = msg.getSubject(); var res = str.match(/\d+/g); var cal = cals[0]; var d1 = new Date(); var yy = d1.getFullYear(); cal.createEvent(str,new Date(res[0],res[1]-1,res[2],res[3],res[4]),new Date(res[0],res[1]-1,res[2],res[5],res[6]),{description:body,sendInvites:false}); //} GmailApp.moveThreadToArchive(thd); } } }

  • google calendar apiで質問です!

    google calendar api とjavascriptを使ってGoogle Calendarに予定の書き込みを行いたいです! しかし、ログインの処理がうまくいっていないためうまく動作しません。 下記のプログラムでログインボタンを押すと、googleアカウントのページに飛び要求されたページは無効です。と表示されてしまいます。 ここのログイン処理がうまくいかないためCalendarへの書き込みが行えないのですが、どのようにしたらいいでしょうか? よろしくお願いします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>calendar test</title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> <!-- google.load("gdata","2"); google.setOnLoadCallback(getMyFeed); function getMyFeed(){ var service = null; var url = "http://www.google.com/calendar/feeds/calendar id/public/full"; service = new google.gdata.calendar.CalendarService ("calendar-sample"); query = new google.gdata.calendar.CalendarEventQuery(url); query.setOrderBy(google.gdata.calendar. CalendarEventQuery.ORDERBY_START_TIME); query.setSortOrder(google.gdata.calendar. CalendarEventQuery.SORTORDER_DESCENDING); query.setSingleEvents(true); query.setMaxResults(10); var start = new google.gdata.DateTime.fromIso8601 ("2013-01-01"); var end = new google.gdata.DateTime. fromIso8601("2013-12-31"); query.setMinimumStartTime(start); query.setMaximumStartTime(end); service.getEventsFeed(query, callback, handleError); } function callback(result) { var entries = result.feed.entry; var res = ""; for (var i = 0; i < entries.length; i++) { var entry = entries[i]; var title = entry.getTitle().getText(); var times = entry.getTimes(); res += (i + 1) + ": " + title + " (" + times[0].startTime + ")<br />"; } document.getElementById("view").innerHTML = res; } function handleError(error) { alert(error); } function Login(){ var scope = 'https://www.google.com/calendar/feeds/'; var token = google.accounts.user.login(scope); } function doAction(){ var service = null; var url = "http://www.google.com/calendar/feeds/calendar id/private/full"; service = new google.gdata.calendar.CalendarService ("calendar-sample"); var scope = "https://www.google.com/calendar/feeds/"; token = google.accounts.user.checkLogin(scope); if (token == ""){ alert("ログインしていません。"); return; } var t1 = document.getElementById("time1").value; var t2 = document.getElementById("time2").value; var title = document.getElementById("title").value; var start = new google.gdata.DateTime.fromIso8601(t1); var end = new google.gdata.DateTime.fromIso8601(t2); var entry = new google.gdata.calendar.CalendarEventEntry(); entry.setTitle(google.gdata.atom.Text.create(title)); var when = new google.gdata.When(); when.setStartTime(start); when.setEndTime(end); entry.addTime(when); var func = function(result) { alert("イベントを追加。"); getMyFeed(); } service.insertEntry(url,entry,func,handleError, google.gdata.calendar.CalendarEventEntry); } //--> </script> </head> <body> <h1>サンプル</h1> <img src="authentication.gif"> <input type="button" value="Login" onclick="Login();"> <hr> <input type="text" id="time1" value="2013-01-01"><br> <input type="text" id="time2" value="2013-01-01"><br> <input type="text" id="title"><br> <input type="button" value="add" onclick="doAction();"> <hr> <div id="view" style="color:#096;"></div> </body> </html>

  • Google Apps Scriptの記述

    フォームに入力したら、フォームに基づいてメールを送れるようにしたいと考えています。 そこで次のScriptを記述しました。しかし、フォームに入力し終わってもメールが送信されません。 Google Apps Scriptの参考サイトも無い事と、Googleも仕様を次々新しくしているので持っている書籍があまり参考になりません。 トリガーは次の通りです。 現在のプロジェクトのトリガーで、実行 mySendhokoku イベントスプレッドシートからフォーム送信時 としています。 scriptは function mySendhokoku(e) { var mail_to=e.nameValues["送信先"]; var datetime= new Date(); var hokoku=e.nameValues["報告種類"]; var kaisi=e.nameValues["開始時間"]; var shuryo=e.nameValues["終了時間"]; var kyukei=e.nameValues["休憩時間"]; var biko=e.nameValues["本文備考"]; var today=formatDate(datetime,"MM/dd"); var subject=hokoku+"連絡"+today+"名前"; var body="名前"+"\n\n"; var body=body+"開始時刻"+kaisi+"\n\n"; var body=body+"終了時刻"+shuryo+"\n\n"; var body=body+"休憩時間"+kyukei+"\n\n"; var body=body+biko+"\n\n"; MailApp.sendEmail(mail_to,subject,body); } ちなみに”名前”と言うところは実際は私の名前が入っています。読み替えてください。 日付は5/5などの様に記述したいと思っています。 初心者で至らない点ありますが、よろしくお願いいたします。

  • Google Apps Script の構文エラー

    Google Apps Scriptの勉強をしようと思い立ち入門書のサンプルコードを見ながら構文を入力しているのですが、 下記の構文を保存しようとすると、“ステートメントの前に ; がありません。(行 2、ファイル「コード」)”というエラー表示が出てしまいます。 サンプルとは一字一句間違いないのですが何が悪いのでしょうか? どなたかお教えいただけないでしょうか。当方javaの知識はほとんど有りません。 function 条件分岐3() { ver myTime = new Date().getHours(); if (myTime < 12) Browser.msgBox("おはよう"); } こちらになります。よろしくお願いいたします。

  • Google Apps Scriptのシート名選択

    初めまして。 3日前位からGoogleスプレッドシートのScriptを勉強し始めて 「シート1のA1セルが編集されたらB1に自動で現在時刻を打刻する」 というスクリプトを作っていました。 サイトを見ながらなんとかA1判定からB1自動打刻までいけたのですが シート名がうまく指定出来ていないみたいで シート1だけでなく【シート2】のA1 を編集してもシート1のB1に打刻されてしまいます。 スプレッドシートは極められたのでその先へ行きたいのですが 最初はやっぱり難しくて苦悩しています; 色々間違えてるかもしれませんが、ぜひ身に付けてみたいので 初めの一歩だけご教授をどうかよろしくお願いします。 function insertLastUpdated() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('シート1'); // rangeXとYにカーソル座標を代入 var rangeX = sheet.getActiveCell().getColumn(); var rangeY = sheet.getActiveCell().getRow(); // シートの座標1,1(A1)が編集されたらB1に現在時刻を打刻(トリガーを編集時に指定) if(rangeX==1&&rangeY==1){ sheet.getRange("B1").setValue(new Date()); } }

  • Scriptを読み込み中の表示について

    HTML <script language="JavaScript" type="text/javascript" src="AAA.js"></script> 外部JS <!-- google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("RSSURL"); feed.setNumEntries(5); feed.load(function(result) { if (!result.error) { var container = document.getElementById("mini_feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("div"); var entry = result.feed.entries[i]; var dd = new Date(entry.publishedDate); // now var yearNum = dd.getYear(); if (yearNum < 2000) yearNum += 1900; var date = yearNum + "年"+(dd.getMonth()+1)+"月"+dd.getDate()+"日"; container.innerHTML += "<div>【"+"<b>" + date+"</b>" +"】<br /><a href='" + entry.link + "'>" + entry.title + "</a></div>"; } } }); } google.setOnLoadCallback(initialize); //--> を設置し、RSSをスクリプトで表示しています。 2秒くらい読込みが遅いので、その部分が、一時空白状態のままになります。 そこで、読み込み中に読込みしていますというぐるぐる回る画像を表示したいのですが、どのように記述すれば宜しいのでしょうか?

  • Google maps api v3

    https://developers.google.com/maps/articles/phpsqlajax_v3?hl=ja を参考にコーディングし、いろいろなサイトも調べてながら(手探り)ですが、どうしてもうまく表示されません。 【maps.php】にてxmlデータを生成しました。それを使ってサイトに表示させるというものです。 うまく表示されないというか、画面が真っ白になってしまいます。 アドバイス等ご教示頂ければ幸甚です。 【index.html】 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Maps</title> <script src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/jacascript"> //<![CDATA[ function load() { var map = new google.maps.Map(document.getElementById("map"), { center: new google.maps.LatLng(35.66, 139.69), zoom: 13, mapTypeId: 'roadmap' }); var infoWindow = new google.maps.InfoWindow; // Change this depending on the name of your PHP file downloadUrl("maps.php", function(data) { var xml = parseXml(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var name = markers[[]i].getAttribute("name"); var address = markers[[]i].getAttribute("address"); var tel = markers[[]i].getAttribute("tel"); var email = markers[[]i].getAttribute("email"); var message = markers[[]i].getAttribute("message"); var point = new google.maps.LatLng( parseFloat(markers[[]i].getAttribute("lat")), parseFloat(markers[[]i].getAttribute("lng"))); var html = "" + name + " " + address; var icon = customIcons[[]type] || {}; var marker = new google.maps.Marker({ map: map, position: point, icon: icon.icon, shadow: icon.shadow }); bindInfoWindow(marker, map, infoWindow, html); } }); } function bindInfoWindow(marker, map, infoWindow, html) { google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); } function downloadUrl(url, callback) { var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState == 4) { request.onreadystatechange = doNothing; callback(request.responseText, request.status); } }; request.open('GET', url, true); request.send(null); } function parseXml(str) { if (window.ActiveXObject) { var doc = new ActiveXObject('Microsoft.XMLDOM'); doc.loadXML(str); return doc; } else if (window.DOMParser) { return (new DOMParser).parseFromString(str, 'text/xml'); } } function doNothing() {} //]]> </script> </head> <body onload="load()"> <div id="map" style="width: 500px; height: 300px"></div> </body> </html>

  • グーグルマップについて教えてください。

    【やりたいこと】 グーグルマップとストリートビューを連動するところまではできました。しかし、地図をクリックして取得されるデータをマーカーが出るように設定し所までは良かったのですが、そのマーカーをクリックしても必要なデータが表示されません。どの様にしたらいいでしょうか? ソースは下記の通りです。 var map; var myPano; var panoClient; var currentLatLng = new GLatLng(35.6829, 139.7653); window.onload = function() { load(); loadd(); setEvent(); } function load() { map = new GMap2(document.getElementById("mymap"),{draggableCursor:"crosshair"}); map.setCenter(new GLatLng(35.6829, 139.7653), 8);    map.addControl(new GMapTypeControl());    map.addControl(new GLargeMapControl3D());    streetview = new GStreetviewOverlay();    map.addOverlay(streetview); map.addControl(new GOverviewMapControl(new GSize(200,200))); } function loadd() {     myPano = new GStreetviewPanorama(document.getElementById("pano")); GEvent.addListener(map,"click", function(overlay,point) { currentLatLng=point; myPano.setLocationAndPOV(currentLatLng); map.setCenter(currentLatLng); }); } function createGMarker(title, html, lat, lng) { var infoObj = new Object(); infoObj.title = title; var gpObj = new GLatLng(lat, lng); var marker = new GMarker(gpObj, infoObj); map.addOverlay(marker); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); }); }

  • google map吹き出し

    下記google mapをスマホで見ると吹き出しが頻繁に出たり消えたりして見づらいのですが 吹き出しは出しっぱなしでカウントダウンのみ動かす方法ありませんか。 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <style type="text/css"> div#map-canvas { position: absolute; width: 100%; height: 100%; } </style> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script type="text/javascript"> var geocoder, map, marker, infoWindow; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(35.710058, 139.810718); var mapDiv = document.getElementById('map-canvas'); var myOptions = { center: latlng, zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(mapDiv, myOptions); google.maps.event.addListener(map, 'click', function(e) { marker = new google.maps.Marker({ position: e.latLng, map: map, draggable: true, title: "Click Me!" }); if(infoWindow) infoWindow.close(); infoWindow = new google.maps.InfoWindow(); var targetDate = Date.parse('2014/07/07 00:00:00'); setInterval ( function() { var now = new Date().getTime(); var diff = targetDate - now; var day = Math.floor ( diff / 86400000 ); diff -= day * 86400000; var hour = Math.floor ( diff / 3600000 ); diff -= hour * 3600000; var minute = Math.floor ( diff / 60000 ); diff -= minute * 60000; var second = Math.floor ( diff / 1000 ); if(infoWindow) infoWindow.setContent ( '七夕まで' + day + '日' + hour + '時間' + minute + '分' + second + '秒' ); },1000); infoWindow.open(map, marker); map.setCenter(e.latLng); }); }; google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map-canvas"></div> </body> </html>

    • ベストアンサー
    • AJAX
  • google feed apiを使い分けたい

    google ajax feed apiですが、下記コードを書いて "rss_url"部分を引数にして同一ページ内でURLの違うものを複数 使用したいのですが、やり方がわかりません。 理想は<div id = "feed"></div>の id = ""の部分を変更してURLごとに使い分けたいのですが、 どうすればいいでしょうか? google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("rss_url"); feed.setNumEntries(5); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); } }); } google.setOnLoadCallback(initialize); このコードだと<div id = "feed"></div>を記述すればうまく実行されます。 試しに google.load("feeds", "1"); function initialize(rss_url, id) { var feed = new google.feeds.Feed(rss_url); feed.setNumEntries(5); feed.load(function(result) { if (!result.error) { var container = document.getElementById(id); } }); } google.setOnLoadCallback(initialize); var test = new MyRssReader("rss_url", "test1"); として <div id = "test1"></div>としてみましがたうまくいきませんでした。