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

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

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

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

Q&A

解決済

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

kamefumi
kamefumi

総合スコア15

Google Apps Script

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

2回答

0グッド

0クリップ

5912閲覧

投稿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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

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

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

回答2

0

フォームに、スクリプトを書き直して、解決しました。
今まで、スプレッドシートに書いていました。

投稿2019/03/05 10:38

kamefumi

総合スコア15

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

0

ベストアンサー

何かのゴミデータが入っているかもしれないので、一回シートを削除して作り直してみてはいかがでしょうか?

投稿2019/03/05 06:47

papinianus

総合スコア12699

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

kamefumi

2019/03/05 07:03

ご回答ありがとうございます。 一度試してみます。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

Google Apps Script

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