質問編集履歴

1

アプローチの変更

2019/10/12 08:14

投稿

Naoki.Y
Naoki.Y

スコア13

test CHANGED
@@ -1 +1 @@
1
- GASでシート変更し、PDFで出力する方法を知りたい
1
+ GASで指定した2枚のシートをPDFで出力する方法を知りたい
test CHANGED
@@ -14,11 +14,9 @@
14
14
 
15
15
  **
16
16
 
17
- 1.申込書のシート名を 案件名 様申込書.pdf に変更
17
+ 1.案件名 様申込書.pdf のPDFを作成
18
-
18
+
19
- 2.請求書のシート名を 案件名 様請求書.pdf に変更
19
+ 2.案件名 様請求書.pdf のPDFを作成
20
-
21
- 3.申込書と請求書のシートをPDFで出力してフォルダに格納
22
20
 
23
21
  **
24
22
 
@@ -26,50 +24,266 @@
26
24
 
27
25
 
28
26
 
29
- いま現状
27
+ ### 現状
30
-
28
+
29
+
30
+
31
- 選択したシートのファイル名を書き換えるところではできたので
31
+ 下記のソースコードで一枚のシートのPDF化には成功しています
32
-
33
-
34
-
32
+
35
- 2つのシート同時に変更するという部分で躓いていて困っています。
33
+ ただ2つのシートをPDF化する部分で躓いています。
36
-
37
- 動作としては
38
-
39
-
40
-
41
- A.◯◯様申込書 で終わるシート名を (指定のセル値)様申込書 に変更
42
-
43
- B.◯◯様請求書 で終わるシート名を (指定のセル値)様請求書 に変更
44
-
45
- C.PDF出力をしてフォルダに格納
46
-
47
-
48
-
49
- という動作になるとおもうのですがA,Bが全くわからない状態です。
50
-
51
-
52
-
53
-
54
-
55
- ### 該当のソースコード
56
34
 
57
35
 
58
36
 
59
37
  ```GAS
60
38
 
61
- function SetSheetName() {
39
+ function myFunction(){
40
+
41
+
42
+
62
-
43
+ // PDFの保存先となるフォルダID https://drive.google.com/drive/u/0/folders/ "1J2Cw2zO-8NyqsWhGS7wQWsLAqH-zdzVB" ここの部分
44
+
45
+ var folderid = "1JvR2CQzO-85yqsWhGS7wxsLAqH-zdzVB";
46
+
47
+
48
+
49
+
50
+
51
+ ////////////////////////////////////////
52
+
53
+ // IDで指定したスプレッドシートをPDF化したい場合//
54
+
55
+ ///////////////////////////////////////
56
+
57
+
58
+
59
+ // 現在開いているスプレッドシートを取得
60
+
63
- var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
61
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
62
+
63
+
64
+
64
-
65
+ // 現在開いているスプレッドシートのIDを取得
66
+
67
+ var ssid = ss.getId();
68
+
69
+ // シートID(gid)を指定
70
+
71
+ var sheetid = "2103348336";
72
+
73
+ var sheetid2 = "1899146493";
74
+
75
+
76
+
77
+ // 指定したスプレッドシートを開く
78
+
65
- var objSheet = objSpreadsheet.getActiveSheet();
79
+ var ss = SpreadsheetApp.openById(ssid);
80
+
81
+
82
+
66
-
83
+ // ファイル名に使用する名前を取得
84
+
67
- var range = objSpreadsheet.getRange('B1');
85
+ var customer_name = ss.getRange("A5").getValue();
86
+
68
-
87
+ // ここで例として使用しているスプレッドシートのA5に顧客の名前が入っているため、それをファイル名用に取得。
88
+
89
+
90
+
91
+ // ファイル名に使用するタイムスタンプを取得
92
+
93
+ var timestamp = getTimestamp();
94
+
95
+
96
+
97
+ // PDF作成関数
98
+
69
- var objNewNameSheet = objSheet.setName(range.getValue()+" - 申込書");
99
+ createPDF( folderid, ssid, sheetid, customer_name + "_" + timestamp );
70
-
71
- Browser.msgBox(objNewNameSheet.getName());
100
+
101
+
72
102
 
73
103
  }
74
104
 
105
+
106
+
107
+ // PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前)
108
+
109
+ function createPDF(folderid, ssid, sheetid, filename){
110
+
111
+
112
+
113
+ // PDFファイルの保存先となるフォルダをフォルダIDで指定
114
+
115
+ var folder = DriveApp.getFolderById(folderid);
116
+
117
+
118
+
119
+ // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成
120
+
121
+ var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid);
122
+
123
+
124
+
125
+ // PDF作成のオプションを指定
126
+
127
+ var opts = {
128
+
129
+ exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx
130
+
131
+ format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx
132
+
133
+ size: "A4", // 用紙サイズの指定 legal / letter / A4
134
+
135
+ portrait: "true", // true → 縦向き、false → 横向き
136
+
137
+ fitw: "true", // 幅を用紙に合わせるか
138
+
139
+ sheetnames: "false", // シート名をPDF上部に表示するか
140
+
141
+ printtitle: "false", // スプレッドシート名をPDF上部に表示するか
142
+
143
+ pagenumbers: "false", // ページ番号の有無
144
+
145
+ gridlines: "false", // グリッドラインの表示有無
146
+
147
+ fzr: "false", // 固定行の表示有無
148
+
149
+ gid: sheetid // シートIDを指定 sheetidは引数で取得
150
+
151
+ };
152
+
153
+
154
+
155
+ var url_ext = [];
156
+
157
+
158
+
159
+ // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納
160
+
161
+ for( optName in opts ){
162
+
163
+ url_ext.push( optName + "=" + opts[optName] );
164
+
165
+ }
166
+
167
+
168
+
169
+ // url_extの各要素を「&」で繋げる
170
+
171
+ var options = url_ext.join("&");
172
+
173
+
174
+
175
+ // optionsは以下のように作成しても同じです。
176
+
177
+ // var ptions = 'exportFormat=pdf&format=pdf'
178
+
179
+ // + '&size=A4'
180
+
181
+ // + '&portrait=true'
182
+
183
+ // + '&sheetnames=false&printtitle=false'
184
+
185
+ // + '&pagenumbers=false&gridlines=false'
186
+
187
+ // + '&fzr=false'
188
+
189
+ // + '&gid=' + sheetid;
190
+
191
+
192
+
193
+ // API使用のためのOAuth認証
194
+
195
+ var token = ScriptApp.getOAuthToken();
196
+
197
+
198
+
199
+ // PDF作成
200
+
201
+ var response = UrlFetchApp.fetch(url + options, {
202
+
203
+ headers: {
204
+
205
+ 'Authorization': 'Bearer ' + token
206
+
207
+ }
208
+
209
+ });
210
+
211
+
212
+
213
+ //
214
+
215
+ var blob = response.getBlob().setName( filename + '.pdf');
216
+
217
+
218
+
219
+ //}
220
+
221
+
222
+
223
+ // PDFを指定したフォルダに保存
224
+
225
+ folder.createFile(blob);
226
+
227
+
228
+
229
+ }
230
+
231
+
232
+
233
+ // タイムスタンプを返す関数
234
+
235
+ function getTimestamp () {
236
+
237
+ var now = new Date();
238
+
239
+ var year = now.getYear();
240
+
241
+ var month = now.getMonth() + 1;
242
+
243
+ var day = now.getDate();
244
+
245
+ var hour = now.getHours();
246
+
247
+ var min =now.getMinutes();
248
+
249
+
250
+
251
+ // var sec = now.getSeconds();
252
+
253
+
254
+
255
+ return year + "" + month + "" + day + "" + hour + "" + min;
256
+
257
+ }
258
+
259
+
260
+
261
+ // スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。
262
+
263
+ function onOpen() {
264
+
265
+ var sheet = SpreadsheetApp.getActiveSpreadsheet();
266
+
267
+ var entries = [
268
+
269
+ {
270
+
271
+ name : "Create PDF",
272
+
273
+ functionName : "myFunction"
274
+
275
+ }
276
+
277
+ ];
278
+
279
+ sheet.addMenu("スクリプト", entries);
280
+
281
+ };
282
+
75
283
  ```
284
+
285
+
286
+
287
+ > 参照先
288
+
289
+ https://www.virment.com/create-pdf-google-apps-script/