🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

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

Google Apps Script

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

PDF

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

5220閲覧

GASで指定した2枚のシートをPDFで出力する方法を知りたい

bassmyryo

総合スコア13

Google スプレッドシート

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

Google Apps Script

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

PDF

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/10/12 06:09

編集2019/10/12 08:14

前提・実現したいこと

GASを触り始めて1週間の初心者ですのでお手柔らかに教えていただければ幸いです。

顧客に送付する請求書と申込書を自動でPDF化するスクリプトを作りたいです。

1ボタンのクリックで

**
1.案件名 様申込書.pdf のPDFを作成
2.案件名 様請求書.pdf のPDFを作成
**
というのが理想です。

現状

下記のソースコードで一枚のシートのPDF化には成功しています。
ただ2つのシートをPDF化する部分で躓いています。

GAS

1function myFunction(){ 2 3// PDFの保存先となるフォルダID https://drive.google.com/drive/u/0/folders/ "1J2Cw2zO-8NyqsWhGS7wQWsLAqH-zdzVB" ここの部分 4 var folderid = "1JvR2CQzO-85yqsWhGS7wxsLAqH-zdzVB"; 5 6 7 //////////////////////////////////////// 8 // IDで指定したスプレッドシートをPDF化したい場合// 9 /////////////////////////////////////// 10 11 // 現在開いているスプレッドシートを取得 12 var ss = SpreadsheetApp.getActiveSpreadsheet(); 13 14 // 現在開いているスプレッドシートのIDを取得 15 var ssid = ss.getId(); 16 // シートID(gid)を指定 17 var sheetid = "2103348336"; 18 var sheetid2 = "1899146493"; 19 20 // 指定したスプレッドシートを開く 21 var ss = SpreadsheetApp.openById(ssid); 22 23 // ファイル名に使用する名前を取得 24 var customer_name = ss.getRange("A5").getValue(); 25 // ここで例として使用しているスプレッドシートのA5に顧客の名前が入っているため、それをファイル名用に取得。 26 27 // ファイル名に使用するタイムスタンプを取得 28 var timestamp = getTimestamp(); 29 30 // PDF作成関数 31 createPDF( folderid, ssid, sheetid, customer_name + "_" + timestamp ); 32 33} 34 35// PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前) 36function createPDF(folderid, ssid, sheetid, filename){ 37 38 // PDFファイルの保存先となるフォルダをフォルダIDで指定 39 var folder = DriveApp.getFolderById(folderid); 40 41 // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成 42 var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); 43 44 // PDF作成のオプションを指定 45 var opts = { 46 exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 47 format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 48 size: "A4", // 用紙サイズの指定 legal / letter / A4 49 portrait: "true", // true → 縦向き、false → 横向き 50 fitw: "true", // 幅を用紙に合わせるか 51 sheetnames: "false", // シート名をPDF上部に表示するか 52 printtitle: "false", // スプレッドシート名をPDF上部に表示するか 53 pagenumbers: "false", // ページ番号の有無 54 gridlines: "false", // グリッドラインの表示有無 55 fzr: "false", // 固定行の表示有無 56 gid: sheetid // シートIDを指定 sheetidは引数で取得 57 }; 58 59 var url_ext = []; 60 61 // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 62 for( optName in opts ){ 63 url_ext.push( optName + "=" + opts[optName] ); 64 } 65 66 // url_extの各要素を「&」で繋げる 67 var options = url_ext.join("&"); 68 69 // optionsは以下のように作成しても同じです。 70 // var ptions = 'exportFormat=pdf&format=pdf' 71 // + '&size=A4' 72 // + '&portrait=true' 73 // + '&sheetnames=false&printtitle=false' 74 // + '&pagenumbers=false&gridlines=false' 75 // + '&fzr=false' 76 // + '&gid=' + sheetid; 77 78 // API使用のためのOAuth認証 79 var token = ScriptApp.getOAuthToken(); 80 81 // PDF作成 82 var response = UrlFetchApp.fetch(url + options, { 83 headers: { 84 'Authorization': 'Bearer ' + token 85 } 86 }); 87 88 // 89 var blob = response.getBlob().setName( filename + '.pdf'); 90 91 //} 92 93 // PDFを指定したフォルダに保存 94 folder.createFile(blob); 95 96} 97 98 // タイムスタンプを返す関数 99 function getTimestamp () { 100 var now = new Date(); 101 var year = now.getYear(); 102 var month = now.getMonth() + 1; 103 var day = now.getDate(); 104 var hour = now.getHours(); 105 var min =now.getMinutes(); 106 107 // var sec = now.getSeconds(); 108 109 return year + "" + month + "" + day + "" + hour + "" + min; 110 } 111 112// スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。 113function onOpen() { 114 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 115 var entries = [ 116 { 117 name : "Create PDF", 118 functionName : "myFunction" 119 } 120 ]; 121 sheet.addMenu("スクリプト", entries); 122};

参照先

https://www.virment.com/create-pdf-google-apps-script/

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ゴリ押しでなんとか上記の形は実装できました。
ただなんかスマートじゃないような気がしていてもしもっといいスクリプトがあれば教えて下さい。

GAS

1function myFunction(){ 2 3// PDFの保存先となるフォルダID https://drive.google.com/drive/u/0/folders/ "1JvR2CwzO-8NyqsWhGS7wxsLAqH-zdzVB" ここの部分 4 var folderid = "1JvR2CwzO-8NyqsWhGS7wxsLAqH-zdzVB"; 5 6 7 //////////////////////////////////////// 8 // IDで指定したスプレッドシートをPDF化したい場合// 9 /////////////////////////////////////// 10 11 // 現在開いているスプレッドシートを取得 12 var ss = SpreadsheetApp.getActiveSpreadsheet(); 13 14 // 現在開いているスプレッドシートのIDを取得 15 var ssid = ss.getId(); 16 // シートID(gid)を指定 17 var sheetid = "2103348336"; 18 var sheetid2 = "1899146493"; 19 20 // 指定したスプレッドシートを開く 21 var ss = SpreadsheetApp.openById(ssid); 22 23 // ファイル名に使用する名前を取得 24 var customer_name = ss.getRange("A5").getValue(); 25 var customer_name2 = ss.getRange("A7").getValue(); 26 // ここで例として使用しているスプレッドシートのA2に顧客の名前が入っているため、それをファイル名用に取得。 27 28 // ファイル名に使用するタイムスタンプを取得 29 var timestamp = getTimestamp(); 30 31 // PDF作成関数 32 createPDF( folderid, ssid, sheetid, customer_name + "_" + timestamp ); 33 createPDF( folderid, ssid, sheetid2, customer_name2 + "_" + timestamp ); 34 35} 36 37// PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前) 38function createPDF(folderid, ssid, sheetid, filename){ 39 40 // PDFファイルの保存先となるフォルダをフォルダIDで指定 41 var folder = DriveApp.getFolderById(folderid); 42 43 // スプレッドシートをPDFにエクスポートするためのURL。このURLに色々なオプションを付けてPDFを作成 44 var url = "https://docs.google.com/spreadsheets/d/SSID/export?".replace("SSID", ssid); 45 46 // PDF作成のオプションを指定 47 var opts = { 48 exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 49 format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx 50 size: "A4", // 用紙サイズの指定 legal / letter / A4 51 portrait: "true", // true → 縦向き、false → 横向き 52 fitw: "true", // 幅を用紙に合わせるか 53 sheetnames: "false", // シート名をPDF上部に表示するか 54 printtitle: "false", // スプレッドシート名をPDF上部に表示するか 55 pagenumbers: "false", // ページ番号の有無 56 gridlines: "false", // グリッドラインの表示有無 57 fzr: "false", // 固定行の表示有無 58 gid: sheetid // シートIDを指定 sheetidは引数で取得 59 }; 60 61 var url_ext = []; 62 63 // 上記のoptsのオプション名と値を「=」で繋げて配列url_extに格納 64 for( optName in opts ){ 65 url_ext.push( optName + "=" + opts[optName] ); 66 } 67 68 // url_extの各要素を「&」で繋げる 69 var options = url_ext.join("&"); 70 71 // optionsは以下のように作成しても同じです。 72 // var ptions = 'exportFormat=pdf&format=pdf' 73 // + '&size=A4' 74 // + '&portrait=true' 75 // + '&sheetnames=false&printtitle=false' 76 // + '&pagenumbers=false&gridlines=false' 77 // + '&fzr=false' 78 // + '&gid=' + sheetid; 79 80 // API使用のためのOAuth認証 81 var token = ScriptApp.getOAuthToken(); 82 83 // PDF作成 84 var response = UrlFetchApp.fetch(url + options, { 85 headers: { 86 'Authorization': 'Bearer ' + token 87 } 88 }); 89 90 // 91 var blob = response.getBlob().setName( filename + '.pdf'); 92 93 //} 94 95 // PDFを指定したフォルダに保存 96 folder.createFile(blob); 97 98} 99 100 // タイムスタンプを返す関数 101 function getTimestamp () { 102 var now = new Date(); 103 var year = now.getYear(); 104 var month = now.getMonth() + 1; 105 var day = now.getDate(); 106 var hour = now.getHours(); 107 var min =now.getMinutes(); 108 109 // var sec = now.getSeconds(); 110 111 return year + "" + month + "" + day + "" + hour + "" + min; 112 } 113 114// スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。 115function onOpen() { 116 var sheet = SpreadsheetApp.getActiveSpreadsheet(); 117 var entries = [ 118 { 119 name : "Create PDF", 120 functionName : "myFunction" 121 } 122 ]; 123 sheet.addMenu("スクリプト", entries); 124};

投稿2019/10/12 08:50

bassmyryo

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問