質問編集履歴

2

エラー画面追加

2023/01/10 05:16

投稿

umako1112
umako1112

スコア1

test CHANGED
File without changes
test CHANGED
@@ -162,3 +162,7 @@
162
162
 
163
163
  }
164
164
  ```
165
+
166
+
167
+ 複合グラフで実行した場合エラーが出てしまいました。
168
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-10/8a7bbd06-d204-49b0-96b6-978a6a9f28f6.png)

1

ソースコード追記

2023/01/10 01:14

投稿

umako1112
umako1112

スコア1

test CHANGED
File without changes
test CHANGED
@@ -23,4 +23,142 @@
23
23
  var file = folder.createFile(chartImage);
24
24
  ```
25
25
 
26
+ ### コード全文
26
27
 
28
+ ```GAS
29
+
30
+ //アクセストークン
31
+ var ACCESS_TOKEN = "アクセストークン";
32
+
33
+ //スプレッドシートID
34
+ var id = "スプレッドシートID";
35
+
36
+ //LINE_BOT返信用エンドポイント
37
+ var replyUrl = "https://api.line.me/v2/bot/message/reply";
38
+
39
+ //LINE_BOTメッセージプッシュ用エンドポイント
40
+ var pushUrl = 'https://api.line.me/v2/bot/message/push';
41
+
42
+ //家計簿LINEのグループID(グラフの送信先として指定)
43
+ var to = 'LINEグループID';
44
+
45
+ //分岐した際最終的にラインに返信する文章
46
+ var text;
47
+
48
+
49
+ /* メッセージがポストされた際の動作 */
50
+ function doPost(e){
51
+ //JSONにパースする
52
+ var json = JSON.parse(e.postData.contents);
53
+
54
+ //送られたLINEメッセージを取得
55
+ var message = json.events[0].message.text;
56
+
57
+ //メッセージの配列化
58
+ var array = message.split(/\n/);
59
+
60
+ //日付取得・シート名取得
61
+ var date = new Date();
62
+ var sendDate = Utilities.formatDate(date,'Asia/Tokyo','M月dd日');
63
+ var sheetName = String(Utilities.formatDate(date,'Asia/Tokyo','yyyy/M'));
64
+ var sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName);
65
+
66
+ var item = sheet.getRange('L5:L15').getValues(); //項目名の配列
67
+
68
+ //入力されたメッセージによって動作を分岐
69
+ if(item.indexOf(array[0]) && Number.isInteger(Number(array[1]))){ //「1行目の文字が配列内にある」かつ「2行目が整数」
70
+
71
+ //スプレッドシートの最終行を取得
72
+ var lastRow = sheet.getRange(3,3).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
73
+
74
+ //スプレッドシートにLINEの内容を登録
75
+ sheet.getRange(lastRow+1,3).setValue(sendDate);
76
+ sheet.getRange(lastRow+1,4).setValue(array[0]);
77
+ sheet.getRange(lastRow+1,5).setValue(array[1]);
78
+ sheet.getRange(lastRow+1,6).setValue(array[2]);
79
+
80
+ //登録が正常に行われた際にメッセージを返信
81
+ text = '日付:'+String(sendDate)+'\n項目:'+String(array[0])+'\n金額:'+String(array[1])+'\n備考:'+String(array[2])+'\n\n上記内容で登録しといたで';
82
+
83
+ }else if(array == 'グラフ'){
84
+
85
+ //シートにあるグラフを配列に格納
86
+ var chart = sheet.getCharts(); //getchartがおかしいはず。わからん。
87
+ var chartImage = chart[0].getAs('image/png').setName("グラフ.png");
88
+
89
+ //Google Driveのフォルダにグラフを画像として格納
90
+ var folderId = 'フォルダーID';
91
+ var folder = DriveApp.getFolderById(folderId);
92
+ var file = folder.createFile(chartImage);
93
+
94
+ //画像を公開設定に変更
95
+ file.setSharing(DriveApp.Access.ANYONE,DriveApp.Permission.EDIT);
96
+
97
+ //画像を関数でラインに送信し、画像を削除
98
+ pushImage(to,file.getDownloadUrl(),file.getDownloadUrl());
99
+ DriveApp.getFolderById(folderId).removeFile(file);
100
+
101
+ }else{
102
+
103
+ text = '入力が間違っています!';
104
+
105
+ }
106
+
107
+
108
+ //textの内容をLINEに返信する
109
+ var replyToken= json.events[0].replyToken;
110
+
111
+ if(typeof replyToken === 'undefined'){
112
+ return;
113
+ }
114
+
115
+ var messages = [{
116
+ 'type': 'text',
117
+ 'text': text,
118
+ }];
119
+
120
+ UrlFetchApp.fetch(replyUrl,{
121
+ 'headers': {
122
+ 'Content-Type': 'application/json; charset=UTF-8',
123
+ 'Authorization': 'Bearer ' + ACCESS_TOKEN,
124
+ },
125
+ 'method': 'post',
126
+ 'payload': JSON.stringify({
127
+ 'replyToken': replyToken,
128
+ 'messages': messages,
129
+ }),
130
+ });
131
+
132
+ return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
133
+ }
134
+
135
+
136
+ //グラフ画像をLINEグループに送信する関数
137
+ function pushImage(to,src,srcPreview){
138
+
139
+ var headers = {
140
+ "Content-Type" : "application/json; charset=UTF-8",
141
+ 'Authorization': 'Bearer ' + ACCESS_TOKEN,
142
+ };
143
+
144
+ var postData = {
145
+ "to" : to,
146
+ "messages" : [
147
+ {
148
+ 'type':'image',
149
+ 'originalContentUrl':src,
150
+ 'previewImageUrl':srcPreview,
151
+ }
152
+ ]
153
+ };
154
+
155
+ var options = {
156
+ "method" : "post",
157
+ "headers" : headers,
158
+ "payload" : JSON.stringify(postData)
159
+ };
160
+
161
+ return UrlFetchApp.fetch(pushUrl, options);
162
+
163
+ }
164
+ ```