質問: [ { name : "Create PDF", functionName : "myFunction" } ]; sheet.addMenu("スクリプト", entries); }; ``` > > 参照先 > > https://www.virment.com/create-pdf-google-apps-script/ > > >
回答: ゴリ押しでなんとか上記の形は実装できました。 ただなんかスマートじゃないような気がしていてもしもっといいスクリプトがあれば教えて下さい。 ``` function myFunction(){ // PDFの保存先となるフォルダID https://drive.google.com/drive/u/0/folders/ "1JvR2CwzO-8NyqsWhGS7wxsLAqH-zdzVB" ここの部分 var folderid = "1JvR2CwzO-8NyqsWhGS7wxsLAqH-zdzVB"; //////////////////////////////////////// // IDで指定したスプレッドシートをPDF化したい場合// /////////////////////////////////////// // 現在開いているスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); // 現在開いているスプレッドシートのIDを取得 var ssid = ss.getId(); // シートID(gid)を指定 var sheetid = "2103348336"; var sheetid2 = "1899146493"; // 指定したスプレッドシートを開く var ss = SpreadsheetApp.openById(ssid); // ファイル名に使用する名前を取得 var customer_name = ss.getRange("A5").getValue(); var customer_name2 = ss.getRange("A7").getValue(); // ここで例として使用しているスプレッドシートのA2に顧客の名前が入っているため、それをファイル名用に取得。 // ファイル名に使用するタイムスタンプを取得 var timestamp = getTimestamp(); // PDF作成関数 createPDF( folderid, ssid, sheetid, customer_name + "_" + timestamp ); createPDF( folderid, ssid, sheetid2, customer_name2 + "_" + timestamp ); } // PDF作成関数 引数は(folderid:保存先フォルダID, ssid:PDF化するスプレッドシートID, sheetid:PDF化するシートID, filename:PDFの名前) function createPDF(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("&"); // optionsは以下のように作成しても同じです。 // var ptions = 'exportFormat=pdf&format=pdf' // + '&size=A4' // + '&portrait=true' // + '&sheetnames=false&printtitle=false' // + '&pagenumbers=false&gridlines=false' // + '&fzr=false' // + '&gid=' + sheetid; // 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); } // タイムスタンプを返す関数 function getTimestamp () { var now = new Date(); var year = now.getYear(); var month = now.getMonth() + 1; var day = now.getDate(); var hour = now.getHours(); var min =now.getMinutes(); // var sec = now.getSeconds(); return year + "" + month + "" + day + "" + hour + "" + min; } // スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。 function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [ { name : "Create PDF", functionName : "myFunction" } ]; sheet.addMenu("スクリプト", entries); }; ```