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

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

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

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

解決済

GASでGoogleフォームの回答結果をpdfに「1枚」で自動出力したい

kamefumi
kamefumi

総合スコア15

Google Apps Script

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

2回答

0評価

0クリップ

5365閲覧

投稿2019/03/05 06:32

GASで、Googleフォームの回答を一旦PDF出力用のスプレッドシートへ書き出し、スプレッドシートをpdf(A4サイズ)として自動で出力するプログラムを記述しています。

回答結果をpdf1枚に収まるように、スプレッドの範囲を調整したはずなのに、
なぜか、pdfが5枚も出力されます。

pdf出力用のスプレッドシートを確認すると、なぜかセルが自動で生成されます。

出力したい範囲が、A4サイズ1枚で収まるように
白紙のpdfが無駄に4枚も出力される原因と解決策を知りたいです。

以下、ソースコードです。よろしくお願いします。

function CreatePDF() { var ssid = "16Cd6zUY5JO0i72KYM3vCs6zxKNVZ1VZ0BE9yUmXjO-A"; var ss = SpreadsheetApp.openById(ssid); var datass = ss.getSheetByName("アンケート回答一覧"); var pdfss = ss.getSheetByName("PDFフォーム"); var pdfsheetid = "855655119" var lastrow = datass.getLastRow(); //最終行を取得します。フォーム回答後に実行されるので、先ほど入力した回答を取得するのと同義です。 var today = new Date(); pdfss.getRange("A1").setValue("今日の日付:" + Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy年M月d日')); pdfss.getRange("C1").setValue("名前:" + datass.getRange(lastrow,2).getValue() + "(" + datass.getRange(lastrow,3).getValue() + ")"); pdfss.getRange("E1").setValue("年齡:" + datass.getRange(lastrow,4).getValue()); pdfss.getRange("F1").setValue("生年月日:" + datass.getRange(lastrow,5).getValue() + "年" + datass.getRange(lastrow,30).getValue() + "月" + datass.getRange(lastrow,31).getValue() + "日"); pdfss.getRange("H1").setValue("性別:" + datass.getRange(lastrow,6).getValue()); pdfss.getRange("A2").setValue("学年:" + datass.getRange(lastrow,7).getValue()); pdfss.getRange("B2").setValue("学校名:" + datass.getRange(lastrow,8).getValue()); pdfss.getRange("E2").setValue("学部:" + datass.getRange(lastrow,9).getValue()); pdfss.getRange("G2").setValue("学科:" + datass.getRange(lastrow,10).getValue()); pdfss.getRange("A3").setValue("電話番号:" + datass.getRange(lastrow,11).getValue()); pdfss.getRange("D3").setValue("メールアドレス:" + datass.getRange(lastrow,29).getValue()); pdfss.getRange("G3").setValue("LINE ID:" + datass.getRange(lastrow,13).getValue()); pdfss.getRange("A37").setValue(datass.getRange(lastrow,28).getValue()); pdfss.getRange("A9").setValue(datass.getRange(lastrow,15).getValue()); pdfss.getRange("A6").setValue(datass.getRange(lastrow,14).getValue()); pdfss.getRange("A13").setValue(datass.getRange(lastrow,16).getValue()); pdfss.getRange("C13").setValue(datass.getRange(lastrow,17).getValue()); pdfss.getRange("A17").setValue(datass.getRange(lastrow,18).getValue()); pdfss.getRange("F17").setValue(datass.getRange(lastrow,19).getValue()); pdfss.getRange("A21").setValue(datass.getRange(lastrow,20).getValue()); pdfss.getRange("F21").setValue(datass.getRange(lastrow,21).getValue()); pdfss.getRange("A25").setValue(datass.getRange(lastrow,22).getValue()); pdfss.getRange("F25").setValue(datass.getRange(lastrow,23).getValue()); pdfss.getRange("A29").setValue(datass.getRange(lastrow,24).getValue()); pdfss.getRange("F29").setValue(datass.getRange(lastrow,25).getValue()); pdfss.getRange("A33").setValue(datass.getRange(lastrow,26).getValue()); pdfss.getRange("F33").setValue(datass.getRange(lastrow,27).getValue()); var folder = DriveApp.getFolderById("1cFQeuIPiti4P5ROWYptsj-mt0DNhLLdf"); //以下PDF化のためのプログラム var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); var opts = { exportFormat: "pdf", format: "pdf", size: "A4", portrait: "true", fitw: "true", sheetnames: "false", printtitle: "false", pagenumbers: "false", gridlines: "false", fzr: "false", gid: pdfsheetid }; var url_ext = []; for( optName in opts ){ url_ext.push( optName + "=" + opts[optName] ); } var options = url_ext.join("&"); var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url + options, { headers: { "Authorization": "Bearer " + token } }); var blob = response.getBlob().setName(Utilities.formatDate( today, 'Asia/Tokyo', 'yyyy年M月d日') + "_" + datass.getRange(lastrow,2).getValue()); //ファイル名を設定 folder.createFile(blob); }

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

papinianus

2019/03/05 06:35

> なぜかセルが自動で生成されます。 具体的にどういう現象ですか?
kamefumi

2019/03/05 06:40

回答ありがとうございます。 Googleフォームで回答後、pdf出力ようのスプレッドシートの一番下の行に、4行ほど自動で追加されます。
papinianus

2019/03/05 06:45 編集

スプレッドシートなので、下にどんどんスクロールできるのは普通だと考えています。4行ほど追加されるデータは何でしょうか?空のセル?回答内容? ちなみに、回答すればするほど下に下がっていく、という理解で正しいですか?
kamefumi

2019/03/05 06:50

いえ、空白のセルです。 一度回答すると、4行ほど最下部に空白のセルが追加されます。 それ以降は、一切追加されていませんでした。 ちなみに、テスト回答すると、同じpdfが複数回出力されます。 ちゃんと1回だけだったり、3回や4回とpdfが出力されるケースもあります。 こちらもご回答おねがいできますでしょうか?
kamefumi

2019/03/05 10:37

スクリプトをスプレッドシートに書いていました。フォームで書き直したら、改善されました。 お付き合いいただき、ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Google Apps Script

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