前提・実現したいこと
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};
参照先
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。