質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

2089閲覧

Spreadsheetをgasでpdf化するとpdfが真っ白になっている

apepe

総合スコア7

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/10/17 23:21

前提・実現したいこと

Googleフォームで作業報告書を作成しました。
Spreadsheetと連携させて、GASを用い、月初にトリガーで前月分の作業精算を行う予定です。

主な作業想定の流れ

・ユーザーは都度報告をGoogleフォームで行う
・月初になるとgasが作業項目ごとに集計を行い、前月の名前のシートを作成して入力
・pdf化⇒管理者&ユーザーにメール

発生している問題・エラーメッセージ

シートは予定通り完成しました。
pdfも生成できメールも送られてきています。
しかしなぜかpdfが白紙です。
シートを挿入するところをコメントアウトにしてpdfにすると、それはそのままpdf化されていました。
どなたかアドバイスいただけると嬉しいです

該当のソースコード

GAS

1function syukeiWorkList() { 2 3 var ID = '1WQeUkNpAvtvijjNXvLN-pOv6DgsicWFh4LIZBKwx47w'; 4 var sheets = SpreadsheetApp.openById(ID).getSheets(); 5 var mastersheet = sheets[0];//マスターシート料金表 6 var sheet = sheets[1];//フォームシート 7 var syukeimaster = sheets[2]; //集計の書式マスター 8 9 //マスターシートの作業項目数を数える 10 11割愛 12 13 var ss = year +month; 14 // シート挿入 15 16 var sheet = SpreadsheetApp.openById(ID); 17 var index = sheet.getNumSheets() ; 18 sheet.insertSheet(ss,index); 19 var syukeisheet = sheet.getSheetByName(ss).activate();//挿入したシート 20 21 22別のマスターシートの中身をコピーしている中身・割愛 23 24 25 //PDF化 26 syukeisheet.activate(); 27 var ssid = ID; 28 var GID = syukeisheet.getSheetId(); 29 // マイドライブ直下に保存したい場合は以下 30 var root= DriveApp.getRootFolder(); 31 var folderid = root.getId(); 32 33 // ファイル名に使用する名前を取得 34 var filename = year + "年" + month + "月オンラインショップ作業報告書"; 35 36 37 var folder = DriveApp.getFolderById(folderid); 38 39 // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成 40 var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); 41 42 // PDF作成のオプションを指定 43 var opts = { 44 exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 45 format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 46 size: "A4", // 用紙サイズの指定 legal / letter / A4 47 portrait: "true", // true → 縦向き、false → 横向き 48 fitw: "true", // 幅を用紙に合わせるか 49 sheetnames: "false", // シート名をPDF上部に表示するか 50 printtitle: "false", // スプレッドシート名をPDF上部に表示するか 51 pagenumbers: "false", // ページ番号の有無 52 gridlines: "false", // グリッドラインの表示有無 53 fzr: "false", // 固定行の表示有無 54 gid: GID // シートIDを指定 sheetidは引数で取得 55 }; 56 57 var url_ext = []; 58 59 // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 60 for( optName in opts ){ 61 url_ext.push( optName + "=" + opts[optName] ); 62 } 63 64 // url_extの各要素を「&」で繋げる 65 var options = url_ext.join("&"); 66 67 // API使用のためのOAuth認証 68 var token = ScriptApp.getOAuthToken(); 69 70 // PDF作成 71 var response = UrlFetchApp.fetch(url + options, { 72 headers: { 73 'Authorization': 'Bearer ' + token 74 } 75 }); 76 77 78 var blob = response.getBlob().setName(filename + '.pdf'); 79 80 // PDFを指定したフォルダに保存 81 folder.createFile(blob); 82 var mail_to = "メールアドレス等"; 83 var subject = filename; 84 var body = "前月分の作業分が確定しました。ご確認お願いします。\n記録フォームはこちら:https://docs.google.com/forms/d/1T9F7rkL3cpPBXzr0e9dCrBktL4d5zDS7jNzAX9RcWoc/edit"; 85 86 GmailApp.sendEmail(mail_to, subject, body, {attachments: blob}); 87 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらの質問の回答にあるようにSpreadsheetをflushしないと挿入したシートやそこに書き込んだ内容が取得できません

コピー→記入→flush→PDF化の順でやればできます

javascript

1SpreadsheetApp.flush(); //ここにこの1文をいれればいいはず 2//PDF化

投稿2018/10/18 00:08

編集2018/10/18 01:10
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/10/18 01:16 編集

コードは、読みづらいのと途中省略があって実行不可能なので読んでません。 実行可能なコード、もしくは引用した先行質問のように個別に関数切り出しできるなら具体的コードで修正や動作確認が行えます。
apepe

2018/10/18 03:13

ありがとうございました。 次から関数切り出しできるように書きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問