2018-12-07 19:31:13 UNSELECTED

Unknown type code

Copy Copied! Full
//指定したIDのGoogle Calendarから一週間分のイベント情報を取得してGoogle slidesの表に入力、それを画像としてGoogle Drive上の指定したIDの画像ファイルに出力するVRC Panorama用スクリプトです。 // //・使い方 //1. 下の指定するファイルについてを参考にファイルを作成し、updateImageFileIdにVRC Panorama参照用画像ファイルID、calendarIdにGoogleCalendarID、presentationIdスクリプトで編集されるスライドのIDを指定してください。 //2. 関数を選択からupdateCalendar()を選択、実行すると、表示→ログの一つ目に参照用画像ファイルのURLが出力されるので、unity上のVRC Panoramaのpanoramasのurlに指定してください。 // またVRC Panorama参照用画像ファイルに、スクリプトで編集されるスライドのサムネイルが出力されるので確認してください //3. 編集→現在のプロジェクトのトリガーより、updateCalendar()を自動起動するタイミングを設定してください。 // //・指定するファイルについて //スクリプトで編集されるスライド(presentationIdに指定するスライド)にはGoogle Drive上にスライド内の1ページ目に7×2の表を作成し、すべてのセルに値を入れてあるものを指定してください。 //指定するスライド例(https://qiita-image-store.s3.amazonaws.com/0/176380/c0a6ed8a-4cca-bbc6-eee2-981b01d78346.png) //VRC Panorama参照用画像ファイルは適当な画像をGoodle Driveにアップロードし、他の人から観覧できるようにしたものを指定してください。 //メイン関数 function updateCalendar(){ var updateImageFileId = "";//VRC Panorama参照用画像ファイルID var calendarId = '';//GoogleCalendarID var presentationId = "";//スクリプトで編集されるスライドのID //VRC Panoramaで指定する画像ファイルの直リンクを出力 Logger.log("http://drive.google.com/uc?export=view&id="+updateImageFileId); var calendar = CalendarApp.getCalendarById(calendarId); var date = new Date(); var date_D = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0); var dayStr = [ "Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat." ]; for(var j=0;j<7;j++){ //日付の更新 var startDate = new Date(date_D.getTime()+(24*60*60*1000)*j); var endDate = new Date(date_D.getTime()+(24*60*60*1000)*(j+1)); var events = calendar.getEvents(startDate,endDate); updateTable(presentationId,j,0,(startDate.getMonth()+1)+"/"+startDate.getDate()+"\n"+dayStr[startDate.getDay()]); //イベントの更新 var titles = ""; for (var i=0; i < events.length; i++) { var title = events[i].getTitle(); titles = titles+"・"+title+"\n"; var startTime = events[i].getStartTime(); Logger.log((startTime.getMonth()+1)+"/"+startTime.getDate()+" "+dayStr[startDate.getDay()]+" "+title); } if(titles == "") titles = " ";//セル内が空白だとエラーになるため updateTable(presentationId,j,1,titles); } var blob = generateScreenshot(presentationId,SlidesApp.openById(presentationId).getSlides()[0]); updateFile(DriveApp.getFileById(updateImageFileId).getName(),updateImageFileId,blob.getAs('image/png')); } //ファイル更新用関数 function updateFile(title,id,blob) { var body = { title: title, mimeType: 'image/png' }; file = Drive.Files.update(body,id, blob); } //Google slidesから画像を生成する関数 function generateScreenshot(presentationId,slide) { var response = Slides.Presentations.Pages.getThumbnail(presentationId, slide.getObjectId()); Logger.log(response); var blob = UrlFetchApp.fetch(response.contentUrl).getBlob(); //DriveApp.createFile(blob).setName("Image " + (1) + ".png");//確認用 return blob; } //確認用 function tableTest(){ updateTable("1dKO0aG-NEnwq_AJkCfCFtIQa_pxC0xKdQvzfh62-p44",0,0,"CCCC\nAAA"); } //表の中のテキストを置き換える //置き換える表のセル内が空欄だとエラーになる function updateTable(presentationId,columnIndex,rowIndex,text) { var presentation = Slides.Presentations.get(presentationId); var slide = presentation.slides[0]; var pageElements = slide["pageElements"]; for(var i =0;i<pageElements.length;i++){ var element = pageElements[i]; var objectId = pageElements[i]["objectId"]; if("table"in element){ var table = element["table"]; var requests=[ { "deleteText":{ "objectId":objectId, "cellLocation":{ "rowIndex":rowIndex, "columnIndex":columnIndex }, "textRange":{ "type":"ALL" } }, },{ "insertText":{ "objectId":objectId, "cellLocation":{ "rowIndex":rowIndex, "columnIndex":columnIndex }, "text":text, "insertionIndex":0 } } ]; Slides.Presentations.batchUpdate({"requests":requests},presentationId); } } }
RECOMMEND