Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

GAS スプレッドシートをPDFに変換してGoogleDriveに保存する(シート単位)

この記事の説明

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から取得できます。

image.png

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

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

注意

  • PDF化したときに空白ページが紛れてしまう
    • スプレッドシートのPDF化は何故か未使用セルの部分までPDF化されてしまい、PDFの最終ページに空白ページが紛れてしまうことがある。この場合は元となるスプレッドシートの未使用領域のセルを削除しておくと良いです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?