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); }
> なぜかセルが自動で生成されます。
具体的にどういう現象ですか?
回答ありがとうございます。
Googleフォームで回答後、pdf出力ようのスプレッドシートの一番下の行に、4行ほど自動で追加されます。
スプレッドシートなので、下にどんどんスクロールできるのは普通だと考えています。4行ほど追加されるデータは何でしょうか?空のセル?回答内容?
ちなみに、回答すればするほど下に下がっていく、という理解で正しいですか?
いえ、空白のセルです。
一度回答すると、4行ほど最下部に空白のセルが追加されます。
それ以降は、一切追加されていませんでした。
ちなみに、テスト回答すると、同じpdfが複数回出力されます。
ちゃんと1回だけだったり、3回や4回とpdfが出力されるケースもあります。
こちらもご回答おねがいできますでしょうか?
最下部の4行は何行目付近ですか?
複数回は、https://teratail.com/questions/177064の質問など既に3件ほど確認しています。formのスクリプトに書いて動作するような修正が必要みたいです。
スクリプトをスプレッドシートに書いていました。フォームで書き直したら、改善されました。
お付き合いいただき、ありがとうございます。

回答2件
あなたの回答
tips
プレビュー