1. jooji

    Posted

    jooji
Changes in title
+GAS スプレッドシートをPDFに変換してGoogleDriveに保存する(シート単位)
Changes in tags
Changes in body
Source | HTML | Preview

この記事の説明

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

参考

GASを使ってGoogle Drive内にあるファイルのダウンロードURLからコンテンツを取得したい
https://qiita.com/tanaike/items/9fd1294647e2181c7765

注意

  • PDF化したときに空白ページが紛れてしまう
    • スプレッドシートのPDF化は何故か未使用セルの部分までPDF化されてしまい、PDFの最終ページに空白ページが紛れてしまうことがある。この場合は未使用領域を削除してしまうと良いです。

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);

参考

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