質問内容
主婦ですが、趣味でLINEとGASを連携させた家計簿を作っております。
Googleスプレッドシートで作成したグラフをLINEに送信したいです。
Google Driveに一時的に画像ファイルとして保存して送信するつもりなのですが、
送信以前にGoogle Driveに画像ファイルが作成されなくて困っています。
送信したいグラフは複合グラフです。
試しにGoogle Drive内にテキストファイルを作成してみたら、きちんとできたのでおそらくgetChart前後の問題かと思っております。
いろいろなサイトを調べて記述を変えたりもしましたが、手詰まりとなってしまいましたのでどなたかご教授いただけますと幸いです。
よろしくお願いいたします。
該当ソースコード
GAS
1 var chart = sheet.getCharts(); 2 var chartImage = chart[0].getAs('image/png').setName("グラフ.png"); 3 4 //Google Driveのフォルダにグラフを画像として格納 5 var folderId = 'Google DriveのフォルダーID'; 6 var folder = DriveApp.getFolderById(folderId); 7 var file = folder.createFile(chartImage);
コード全文
GAS
1 2//アクセストークン 3var ACCESS_TOKEN = "アクセストークン"; 4 5//スプレッドシートID 6var id = "スプレッドシートID"; 7 8//LINE_BOT返信用エンドポイント 9var replyUrl = "https://api.line.me/v2/bot/message/reply"; 10 11//LINE_BOTメッセージプッシュ用エンドポイント 12var pushUrl = 'https://api.line.me/v2/bot/message/push'; 13 14//家計簿LINEのグループID(グラフの送信先として指定) 15var to = 'LINEグループID'; 16 17//分岐した際最終的にラインに返信する文章 18var text; 19 20 21/* メッセージがポストされた際の動作 */ 22function doPost(e){ 23 //JSONにパースする 24 var json = JSON.parse(e.postData.contents); 25 26 //送られたLINEメッセージを取得 27 var message = json.events[0].message.text; 28 29 //メッセージの配列化 30 var array = message.split(/\n/); 31 32 //日付取得・シート名取得 33 var date = new Date(); 34 var sendDate = Utilities.formatDate(date,'Asia/Tokyo','M月dd日'); 35 var sheetName = String(Utilities.formatDate(date,'Asia/Tokyo','yyyy/M')); 36 var sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName); 37 38 var item = sheet.getRange('L5:L15').getValues(); //項目名の配列 39 40 //入力されたメッセージによって動作を分岐 41 if(item.indexOf(array[0]) && Number.isInteger(Number(array[1]))){ //「1行目の文字が配列内にある」かつ「2行目が整数」 42 43 //スプレッドシートの最終行を取得 44 var lastRow = sheet.getRange(3,3).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); 45 46 //スプレッドシートにLINEの内容を登録 47 sheet.getRange(lastRow+1,3).setValue(sendDate); 48 sheet.getRange(lastRow+1,4).setValue(array[0]); 49 sheet.getRange(lastRow+1,5).setValue(array[1]); 50 sheet.getRange(lastRow+1,6).setValue(array[2]); 51 52 //登録が正常に行われた際にメッセージを返信 53 text = '日付:'+String(sendDate)+'\n項目:'+String(array[0])+'\n金額:'+String(array[1])+'\n備考:'+String(array[2])+'\n\n上記内容で登録しといたで'; 54 55 }else if(array == 'グラフ'){ 56 57 //シートにあるグラフを配列に格納 58 var chart = sheet.getCharts(); //getchartがおかしいはず。わからん。 59 var chartImage = chart[0].getAs('image/png').setName("グラフ.png"); 60 61 //Google Driveのフォルダにグラフを画像として格納 62 var folderId = 'フォルダーID'; 63 var folder = DriveApp.getFolderById(folderId); 64 var file = folder.createFile(chartImage); 65 66 //画像を公開設定に変更 67 file.setSharing(DriveApp.Access.ANYONE,DriveApp.Permission.EDIT); 68 69 //画像を関数でラインに送信し、画像を削除 70 pushImage(to,file.getDownloadUrl(),file.getDownloadUrl()); 71 DriveApp.getFolderById(folderId).removeFile(file); 72 73 }else{ 74 75 text = '入力が間違っています!'; 76 77 } 78 79 80 //textの内容をLINEに返信する 81 var replyToken= json.events[0].replyToken; 82 83 if(typeof replyToken === 'undefined'){ 84 return; 85 } 86 87 var messages = [{ 88 'type': 'text', 89 'text': text, 90 }]; 91 92 UrlFetchApp.fetch(replyUrl,{ 93 'headers': { 94 'Content-Type': 'application/json; charset=UTF-8', 95 'Authorization': 'Bearer ' + ACCESS_TOKEN, 96 }, 97 'method': 'post', 98 'payload': JSON.stringify({ 99 'replyToken': replyToken, 100 'messages': messages, 101 }), 102 }); 103 104 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 105} 106 107 108//グラフ画像をLINEグループに送信する関数 109function pushImage(to,src,srcPreview){ 110 111 var headers = { 112 "Content-Type" : "application/json; charset=UTF-8", 113 'Authorization': 'Bearer ' + ACCESS_TOKEN, 114 }; 115 116 var postData = { 117 "to" : to, 118 "messages" : [ 119 { 120 'type':'image', 121 'originalContentUrl':src, 122 'previewImageUrl':srcPreview, 123 } 124 ] 125 }; 126 127 var options = { 128 "method" : "post", 129 "headers" : headers, 130 "payload" : JSON.stringify(postData) 131 }; 132 133 return UrlFetchApp.fetch(pushUrl, options); 134 135}
複合グラフで実行した場合エラーが出てしまいました。

回答1件
あなたの回答
tips
プレビュー