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

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

ただいまの
回答率

90.35%

  • Google Apps Script

    1475questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 913

apepe

score 5

 前提・実現したいこと

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

主な作業想定の流れ

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

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

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

 該当のソースコード

```GAS
function syukeiWorkList() {

var ID = '1WQeUkNpAvtvijjNXvLN-pOv6DgsicWFh4LIZBKwx47w';
var sheets = SpreadsheetApp.openById(ID).getSheets();
var mastersheet = sheets[0];//マスターシート料金表
var sheet = sheets[1];//フォームシート
var syukeimaster = sheets[2]; //集計の書式マスター

//マスターシートの作業項目数を数える

割愛

var ss = year +month;
// シート挿入

var sheet = SpreadsheetApp.openById(ID);
var index = sheet.getNumSheets() ;
sheet.insertSheet(ss,index);
var syukeisheet = sheet.getSheetByName(ss).activate();//挿入したシート

別のマスターシートの中身をコピーしている中身・割愛

//PDF化
syukeisheet.activate();
var ssid = ID;
var GID = syukeisheet.getSheetId();
// マイドライブ直下に保存したい場合は以下
var root= DriveApp.getRootFolder();
var folderid = root.getId();

// ファイル名に使用する名前を取得
var filename = year + "年" + month + "月オンラインショップ作業報告書";

var folder = DriveApp.getFolderById(folderid);

// スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成
var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid);

// PDF作成のオプションを指定
var opts = {
exportFormat: "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
format:       "pdf",    // ファイル形式の指定 pdf / csv / xls / xlsx
size:         "A4",     // 用紙サイズの指定 legal / letter / A4
portrait:     "true",   // true → 縦向き、false → 横向き
fitw:         "true",   // 幅を用紙に合わせるか
sheetnames:   "false",  // シート名をPDF上部に表示するか
printtitle:   "false",  // スプレッドシート名をPDF上部に表示するか
pagenumbers:  "false",  // ページ番号の有無
gridlines:    "false",  // グリッドラインの表示有無
fzr:          "false",  // 固定行の表示有無
gid:          GID  // シートIDを指定 sheetidは引数で取得
};

var url_ext = [];

// 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納
for( optName in opts ){
url_ext.push( optName + "=" + opts[optName] );
}

// url_extの各要素を「&」で繋げる
var options = url_ext.join("&");

// API使用のためのOAuth認証
var token = ScriptApp.getOAuthToken();

// PDF作成
var response = UrlFetchApp.fetch(url + options, {
headers: {
'Authorization': 'Bearer ' +  token
}
});

var blob = response.getBlob().setName(filename + '.pdf');

// PDFを指定したフォルダに保存
folder.createFile(blob);
var mail_to = "メールアドレス等";
var subject = filename;
var body = "前月分の作業分が確定しました。ご確認お願いします。\n記録フォームはこちら:https://docs.google.com/forms/d/1T9F7rkL3cpPBXzr0e9dCrBktL4d5zDS7jNzAX9RcWoc/edit";

GmailApp.sendEmail(mail_to, subject, body, {attachments: blob});
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/18 09:11 編集

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

    キャンセル

  • 2018/10/18 12:13

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

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Google Apps Script

    1475questions

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