1. jooji

    Posted

    jooji
Changes in title
+GAS スプレッドシートをPDFに変換してGoogleDriveに保存する(シート単位)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,95 @@
+# この記事の説明
+GASを使って、スプレッドシートをPDFに変換する処理を記述する際の説明です。
+
+
+#PDF化してダウンロードする
+
+スプレッドシートでファイルをエクスポートするには、下記のURLにアクセスすることで出来ます。
+URLに、クエリストリングでパラメータを渡すことで、変換フォーマットや変換するシートを指定します。
+
+もちろん変換・ダウンロードには、認証が必要です。
+
+
+#1. エクスポートURL
+`"https://docs.google.com/spreadsheets/d/[スプレッドシートID]/export"`
+
+- クエリストリング
+ - `?exportFormat=pdf`
+
+- シートを指定するには?
+ - クエリストリングgidにシートIDを渡します。
+ - `?gid=[シートID]`
+
+- シートIDとは?
+ - スプレッドシートの各シートには固有のidが振られています。下図のようにURLから取得できます。
+
+![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342467/44b391f8-f74d-b3df-a907-d367dbe23d4e.png)
+
+## 参考
+> GASを使ってGoogle Drive内にあるファイルのダウンロードURLからコンテンツを取得したい
+> https://qiita.com/tanaike/items/9fd1294647e2181c7765
+
+##注意
+- PDF化したときに空白ページが紛れてしまう
+ - スプレッドシートのPDF化は何故か未使用セルの部分までPDF化されてしまい、PDFの最終ページに空白ページが紛れてしまうことがある。この場合は未使用領域を削除してしまうと良いです。
+
+
+
+#2. 認証
+ファイルへのアクセス権を証明するために、`ScriptApp.getOAuthToken();`でトークンを取得して、そのトークンを使って認証します。
+今回はBearer認証を使います。
+
+
+```javascript
+
+ var url = "https://docs.google.com/spreadsheets/d/" + QuoteStId + "/export?exportFormat=pdf&gid=SID".replace("SID",stId);
+ var token = ScriptApp.getOAuthToken();
+ var response = UrlFetchApp.fetch(url,{
+ headers:{
+ "Authorization" : "Bearer "+ token
+ }
+ });
+```
+
+#3. PDFをGoogleDriveに保存する。
+urlfetchの戻り値の中のblobを使って、DriveAppのcreateFileメソッドを使ってドライブに保存します。
+
+```javascript
+ var filename = "ファイル名"
+ var blob = response.getBlob().setName(filename);
+ var folder = DriveApp.getFolderById("GoogleDriveに作成した保存フォルダのID");
+ var file = folder.createFile(blob);
+```
+
+#4. GASコードまとめ
+
+```javascript
+
+//PDF化
+ var url = "https://docs.google.com/spreadsheets/d/" + QuoteStId + "/export?exportFormat=pdf&gid=SID".replace("SID",stId);
+ var token = ScriptApp.getOAuthToken();
+ var response = UrlFetchApp.fetch(url,{
+ headers:{
+ "Authorization" : "Bearer "+ token
+ }
+
+ //PDFファイルをGoogleドライブに保存する処理
+ var filename = "ファイルネーム"
+ var blob = response.getBlob().setName(filename);
+ var folder = DriveApp.getFolderById("GoogleDriveに作成した保存フォルダのID");
+ var file = folder.createFile(blob);
+
+```
+
+### 参考
+
+> GASを使った認可パターン
+> https://medium.com/@gw_cule/gas%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E8%AA%8D%E5%8F%AF%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-67f195d7a425
+
+> Bearer認証について
+> https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1
+
+> [Google Apps Script]認証が必要なウェブアプリケーションを外部から実行する
+>https://www.ka-net.org/blog/?p=12258
+
+