この記事の説明
GASを使って、スプレッドシートをPDFに変換する処理を記述する際の手順です。
#PDF化してDriveに保存する
スプレッドシートでファイルをエクスポートするには、下記のURLにアクセスすることで出来ます。
URLに、クエリストリングでパラメータを渡すことで、変換フォーマットや変換するシートを指定します。
変換には認証が必要です。
#1. エクスポートURL
"https://docs.google.com/spreadsheets/d/[スプレッドシートID]/export"
-
クエリストリング
?exportFormat=pdf
-
シートを指定するには?
- クエリストリングgidにシートIDを渡します。
?gid=[シートID]
-
シートIDとは?
- スプレッドシートの各シートには固有のidが振られています。下図のようにURLから取得できます。
#2. 認証
ファイルへのアクセス権を証明するために、ScriptApp.getOAuthToken();
でトークンを取得して、そのトークンを使って認証します。
今回はBearer認証を使います。
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メソッドを使ってドライブに保存します。
var filename = "ファイル名"
var blob = response.getBlob().setName(filename);
var folder = DriveApp.getFolderById("GoogleDriveに作成した保存フォルダのID");
var file = folder.createFile(blob);
#4. GASコードまとめ
//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);
参考
Bearer認証について
https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1
[Google Apps Script]認証が必要なウェブアプリケーションを外部から実行する
https://www.ka-net.org/blog/?p=12258
GASを使ってGoogle Drive内にあるファイルのダウンロードURLからコンテンツを取得したい
https://qiita.com/tanaike/items/9fd1294647e2181c7765
注意
- PDF化したときに空白ページが紛れてしまう
- スプレッドシートのPDF化は何故か未使用セルの部分までPDF化されてしまい、PDFの最終ページに空白ページが紛れてしまうことがある。この場合は元となるスプレッドシートの未使用領域のセルを削除しておくと良いです。