質問するログイン新規登録

質問編集履歴

1

アプローチの変更

2019/10/12 08:14

投稿

Naoki.Y
Naoki.Y

スコア13

title CHANGED
@@ -1,1 +1,1 @@
1
- GASでシート変更し、PDFで出力する方法を知りたい
1
+ GASで指定した2枚のシートをPDFで出力する方法を知りたい
body CHANGED
@@ -6,33 +6,140 @@
6
6
  1ボタンのクリックで
7
7
 
8
8
  **
9
- 1.申込書のシート名を 案件名 様申込書.pdf に変更
9
+ 1.案件名 様申込書.pdf のPDFを作成
10
- 2.請求書のシート名を 案件名 様請求書.pdf に変更
10
+ 2.案件名 様請求書.pdf のPDFを作成
11
- 3.申込書と請求書のシートをPDFで出力してフォルダに格納
12
11
  **
13
12
  というのが理想です。
14
13
 
15
- いま現状
14
+ ### 現状
16
- 選択したシートのファイル名を書き換えるところまではできたのですが
17
15
 
16
+ 下記のソースコードで一枚のシートのPDF化には成功しています。
18
- 2つのシート同時に変更するという部分で躓いていて困っています。
17
+ ただ2つのシートをPDF化する部分で躓いています。
19
- 動作としては
20
18
 
19
+ ```GAS
21
- A.◯◯様申込書 で終わるシート名を (指定のセル値)様申込書 に変更
20
+ function myFunction(){
22
- B.◯◯様請求書 で終わるシート名を (指定のセル値)様請求書 に変更
23
- C.PDF出力をしてフォルダに格納
24
21
 
22
+ // PDFの保存先となるフォルダID https://drive.google.com/drive/u/0/folders/ "1J2Cw2zO-8NyqsWhGS7wQWsLAqH-zdzVB" ここの部分
23
+ var folderid = "1JvR2CQzO-85yqsWhGS7wxsLAqH-zdzVB";
24
+
25
+
26
+ ////////////////////////////////////////
25
- という動作になるとおもうのすがA,Bが全くわからな状態です。
27
+ // ID指定したスプレッドシートをPDF化した場合//
28
+ ///////////////////////////////////////
26
29
 
30
+ // 現在開いているスプレッドシートを取得
31
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
32
+
33
+ // 現在開いているスプレッドシートのIDを取得
34
+ var ssid = ss.getId();
35
+ // シートID(gid)を指定
36
+ var sheetid = "2103348336";
37
+ var sheetid2 = "1899146493";
27
38
 
28
- ### 該当のソーコー
39
+ // 指定したプレッシートを開く
40
+ var ss = SpreadsheetApp.openById(ssid);
29
41
 
30
- ```GAS
31
- function SetSheetName() {
42
+ // ファイル名に使用する名前を取得
32
- var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
33
- var objSheet = objSpreadsheet.getActiveSheet();
34
- var range = objSpreadsheet.getRange('B1');
43
+ var customer_name = ss.getRange("A5").getValue();
44
+ // ここで例として使用しているスプレッドシートのA5に顧客の名前が入っているため、それをファイル名用に取得。
45
+
46
+ // ファイル名に使用するタイムスタンプを取得
47
+ var timestamp = getTimestamp();
48
+
49
+ // PDF作成関数
35
- var objNewNameSheet = objSheet.setName(range.getValue()+" - 申込書");
50
+ createPDF( folderid, ssid, sheetid, customer_name + "_" + timestamp );
36
- Browser.msgBox(objNewNameSheet.getName());
51
+
37
52
  }
53
+
54
+ // PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前)
55
+ function createPDF(folderid, ssid, sheetid, filename){
56
+
57
+ // PDFファイルの保存先となるフォルダをフォルダIDで指定
58
+ var folder = DriveApp.getFolderById(folderid);
59
+
60
+ // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成
61
+ var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid);
62
+
63
+ // PDF作成のオプションを指定
64
+ var opts = {
65
+ exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx
66
+ format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx
67
+ size: "A4", // 用紙サイズの指定 legal / letter / A4
68
+ portrait: "true", // true → 縦向き、false → 横向き
69
+ fitw: "true", // 幅を用紙に合わせるか
70
+ sheetnames: "false", // シート名をPDF上部に表示するか
71
+ printtitle: "false", // スプレッドシート名をPDF上部に表示するか
72
+ pagenumbers: "false", // ページ番号の有無
73
+ gridlines: "false", // グリッドラインの表示有無
74
+ fzr: "false", // 固定行の表示有無
75
+ gid: sheetid // シートIDを指定 sheetidは引数で取得
76
+ };
77
+
78
+ var url_ext = [];
79
+
80
+ // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納
81
+ for( optName in opts ){
82
+ url_ext.push( optName + "=" + opts[optName] );
83
+ }
84
+
85
+ // url_extの各要素を「&」で繋げる
86
+ var options = url_ext.join("&");
87
+
88
+ // optionsは以下のように作成しても同じです。
89
+ // var ptions = 'exportFormat=pdf&format=pdf'
90
+ // + '&size=A4'
91
+ // + '&portrait=true'
92
+ // + '&sheetnames=false&printtitle=false'
93
+ // + '&pagenumbers=false&gridlines=false'
94
+ // + '&fzr=false'
95
+ // + '&gid=' + sheetid;
96
+
97
+ // API使用のためのOAuth認証
98
+ var token = ScriptApp.getOAuthToken();
99
+
100
+ // PDF作成
101
+ var response = UrlFetchApp.fetch(url + options, {
102
+ headers: {
103
+ 'Authorization': 'Bearer ' + token
104
+ }
105
+ });
106
+
107
+ //
108
+ var blob = response.getBlob().setName( filename + '.pdf');
109
+
110
+ //}
111
+
112
+ // PDFを指定したフォルダに保存
113
+ folder.createFile(blob);
114
+
115
+ }
116
+
117
+ // タイムスタンプを返す関数
118
+ function getTimestamp () {
119
+ var now = new Date();
120
+ var year = now.getYear();
121
+ var month = now.getMonth() + 1;
122
+ var day = now.getDate();
123
+ var hour = now.getHours();
124
+ var min =now.getMinutes();
125
+
126
+ // var sec = now.getSeconds();
127
+
128
+ return year + "" + month + "" + day + "" + hour + "" + min;
129
+ }
130
+
131
+ // スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。
132
+ function onOpen() {
133
+ var sheet = SpreadsheetApp.getActiveSpreadsheet();
134
+ var entries = [
135
+ {
136
+ name : "Create PDF",
137
+ functionName : "myFunction"
138
+ }
139
+ ];
140
+ sheet.addMenu("スクリプト", entries);
141
+ };
38
- ```
142
+ ```
143
+
144
+ > 参照先
145
+ https://www.virment.com/create-pdf-google-apps-script/