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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

解決済

【GAS】「カスタムの改ページ」に合わせてPDF化させるボタンを作りたい。【スプレッドシート】

rudolf_fox
rudolf_fox

総合スコア25

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

2回答

0評価

1クリップ

5878閲覧

投稿2020/01/05 03:06

編集2020/01/06 01:16

こんにちは。当方グーグルスプレッドシートの関数はそこそこ触れますが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

function tateCreatePDF(){ ///////////////////////////////////////////// // 現在開いているスプレッドシートをPDF化したい場合// //////////////////////////////////////////// // 現在開いているスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); // PDFの保存先となるフォルダIDをセルの内容を見て設定 var folderid = ss.getRange("X1").getValue(); // 現在開いているスプレッドシートのIDを取得 var ssid = ss.getId(); // 現在開いているスプレッドシートのシートIDを取得 var sheetid = ss.getActiveSheet().getSheetId(); // ファイル名に使用する名前を取得(Z1にファイル名に使用するデータを格納してある) var customer_name = ss.getRange("Z1").getValue(); // ファイル名に使用するタイムスタンプを取得 var timestamp = getTimestamp(); // PDF作成関数 tatecreatePDF( folderid, ssid, sheetid, customer_name + "_" + timestamp ); } // PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前) function tatecreatePDF(folderid, ssid, sheetid, filename){ // PDFファイルの保存先となるフォルダをフォルダIDで指定 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: sheetid // シート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); }

このようなコードを用いて横幅に合わせて縦出力(横出力は省略)をすることができました。
しかし、このコードでは「カスタムの改ページ」に合わせてPDF化することはできません。

#このような改ページをしたい。
以下の画像のような改ページをしたいです。
改ページ例

#このページがどのように変動するか、どのようにページをPDF化したいか
画像では3データのみですが、場合によって増減します。
1ページに3データずつ入ったPDFを作成したいです。
PDF化ボタンは画像上部欄外に実装してあります。

#今後試してみること
2日ほどつけおきして、headerとfooterの幅を調整できることを思い出しました。
ごり押しですが、headerとfooterの幅を微調整して3レコードずつしか印刷できない幅を探してみるつもりです。
解決できたら自己解決に投稿します。

#お願いと補足
以上のような要件に答えられるGASは作れるのでしょうか?
「カスタムの改ページ」に合わせられなくても、3データずつPDF化できれば問題ありません。
※セル数を見て改ページ・PDF化など。1データの縦セル数は同数です。

初心者丸出しで申し訳ございませんが、どなたか有識者の方や参考URLをお持ちの方などいらっしゃいましたらご教授いただけますと幸いです。
よろしくお願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

m.ts10806

2020/01/05 05:25

回答依頼いただいて申し訳ないのですがつけられてるタグどれもフォローしてないものなので「ググって見つかる情報」以上の提示はできません。
rudolf_fox

2020/01/05 05:35

ありがとうございます。 お勧めで出てきたのでつい回答依頼をしてしまいました…。 ご閲覧いただきありがとうございます。
m.ts10806

2020/01/05 09:42

依頼しようとしてるタグの個別スコアランキングを確認すると良いかもしれません
rudolf_fox

2020/01/06 01:14

ご指導ありがとうございます! さっそくですが、次回からは個別スコアランキングを確認して依頼したいと思います。 これも修正できるようであれば、個別スコアランキングを見て依頼してみたいと思います。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。