こんにちは。当方グーグルスプレッドシートの関数はそこそこ触れますがGASを最近触り始めた素人です。
どうぞ有識者の方、お力添えください。
#【やりたいこと】と【やったこと】
0. シートに図形でPDF化ボタンを追加する。→できた。
0. 縦A4出力と横A4出力のものを分けて用意する。 →できた。
0. PDF化したものをセルで指定したグーグルドライブに格納する。 →できた。
0. PDFの範囲を「カスタムの改ページ」に合わせたい。 →できない。
#具体的なコードと困っていること
以下のサイト様のコードを流用して、「 var folderid = ss.getRange("X1").getValue();」のみ変更してPDF化ボタンの設置、セル参照できました。
https://www.virment.com/create-pdf-google-apps-script/
GoogleAppsSprict
1function tateCreatePDF(){ 2 3 ///////////////////////////////////////////// 4 // 現在開いているスプレッドシートをPDF化したい場合// 5 //////////////////////////////////////////// 6 // 現在開いているスプレッドシートを取得 7 var ss = SpreadsheetApp.getActiveSpreadsheet(); 8 9 // PDFの保存先となるフォルダIDをセルの内容を見て設定 10 var folderid = ss.getRange("X1").getValue(); 11 12 // 現在開いているスプレッドシートのIDを取得 13 var ssid = ss.getId(); 14 15 // 現在開いているスプレッドシートのシートIDを取得 16 var sheetid = ss.getActiveSheet().getSheetId(); 17 18 // ファイル名に使用する名前を取得(Z1にファイル名に使用するデータを格納してある) 19 var customer_name = ss.getRange("Z1").getValue(); 20 21 // ファイル名に使用するタイムスタンプを取得 22 var timestamp = getTimestamp(); 23 24 // PDF作成関数 25 tatecreatePDF( folderid, ssid, sheetid, customer_name + "_" + timestamp ); 26 27} 28 29// PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前) 30function tatecreatePDF(folderid, ssid, sheetid, filename){ 31 32 // PDFファイルの保存先となるフォルダをフォルダIDで指定 33 var folder = DriveApp.getFolderById(folderid); 34 35 // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成 36 var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); 37 38 // PDF作成のオプションを指定 39 var opts = { 40 exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 41 format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 42 size: "A4", // 用紙サイズの指定 legal / letter / A4 43 portrait: "true", // true → 縦向き、false → 横向き 44 fitw: "true", // 幅を用紙に合わせるか 45 sheetnames: "false", // シート名をPDF上部に表示するか 46 printtitle: "false", // スプレッドシート名をPDF上部に表示するか 47 pagenumbers: "false", // ページ番号の有無 48 gridlines: "false", // グリッドラインの表示有無 49 fzr: "false", // 固定行の表示有無 50 gid: sheetid // シートIDを指定 sheetidは引数で取得 51 }; 52 53 var url_ext = []; 54 55 // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 56 for( optName in opts ){ 57 url_ext.push( optName + "=" + opts[optName] ); 58 } 59 60 // url_extの各要素を「&」で繋げる 61 var options = url_ext.join("&"); 62 63 64 // API使用のためのOAuth認証 65 var token = ScriptApp.getOAuthToken(); 66 67 // PDF作成 68 var response = UrlFetchApp.fetch(url + options, { 69 headers: { 70 'Authorization': 'Bearer ' + token 71 } 72 }); 73 74 // 75 var blob = response.getBlob().setName(filename + '.pdf'); 76 77 //} 78 79 // PDFを指定したフォルダに保存 80 folder.createFile(blob); 81 82}
このようなコードを用いて横幅に合わせて縦出力(横出力は省略)をすることができました。
しかし、このコードでは「カスタムの改ページ」に合わせてPDF化することはできません。
#このような改ページをしたい。
以下の画像のような改ページをしたいです。
#このページがどのように変動するか、どのようにページをPDF化したいか
画像では3データのみですが、場合によって増減します。
1ページに3データずつ入ったPDFを作成したいです。
PDF化ボタンは画像上部欄外に実装してあります。
#今後試してみること
2日ほどつけおきして、headerとfooterの幅を調整できることを思い出しました。
ごり押しですが、headerとfooterの幅を微調整して3レコードずつしか印刷できない幅を探してみるつもりです。
解決できたら自己解決に投稿します。
#お願いと補足
以上のような要件に答えられるGASは作れるのでしょうか?
「カスタムの改ページ」に合わせられなくても、3データずつPDF化できれば問題ありません。
※セル数を見て改ページ・PDF化など。1データの縦セル数は同数です。
初心者丸出しで申し訳ございませんが、どなたか有識者の方や参考URLをお持ちの方などいらっしゃいましたらご教授いただけますと幸いです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー