function myFunction(){
// PDFの保存先となるフォルダID 確認方法は後述
var folderid = "XXX";
// マイドライブ直下に保存したい場合は以下
// var root= DriveApp.getRootFolder();
// var folderid = root.getId();
/////////////////////////////////////////////
// 現在開いているスプレッドシートをPDF化したい場合//
////////////////////////////////////////////
// 現在開いているスプレッドシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
// 現在開いているスプレッドシートのIDを取得
var ssid = ss.getId();
// 現在開いているスプレッドシートのシートIDを取得
// var sheetid = ss.getActiveSheet().getSheetId();
// getActiveSheetの後の()を忘れると、TypeError: オブジェクト function getActiveSheet() {/* */} で関数 getSheetId が見つかりません。
// スプレッドシートのシートIDを取得
var sheetid = SpreadsheetApp.getActiveSpreadsheet().getSheets();
// シート数
var intMaxIndex = sheetid.length;
// シート数を元にループで回してPDF発行
for (intIndex = 0; intIndex < intMaxIndex; intIndex++) {
// 処理が追い付かないのでスリープを入れる
if(intIndex == 4 || intIndex == 7 || intIndex == 10 || intIndex == 13){
Utilities.sleep(20000);
}
// シートIDを一つずつ取得
var sheetids = [];
sheetids = sheetid[intIndex].getSheetId();
// ファイル名に使用する名前を取得
var customer_name = [];
customer_name = sheetid[intIndex].getName();
//customer_name = ss.getRange("B3").getValue();
// ここで例として使用しているスプレッドシートのC15に顧客の名前が入っているため、それをファイル名用に取得しているだけです。
// ファイル名に使用するタイムスタンプを取得
var timestamp = getTimestamp();
// PDF作成関数
createPDF( folderid, ssid, sheetids, customer_name + "_" + 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();
// 日時はいらないので、コメントアウト
//var month = now.getMonth() + 1; 当月が表示される
//var day = now.getDate();
//var hour = now.getHours();
//var min = now.getMinutes();
// var sec = now.getSeconds();
return year + "年" + month + "月分";
//return year + "_" + month + "_" + day + "_" + hour + min;
}
// スプレッドシートのメニューからPDF作成用の関数を実行出来るように、「スクリプト」というメニューを追加。
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
{
name : "請求書PDFを作成する",
functionName : "myFunction"
}
];
sheet.addMenu("PDFを作成", entries);
};
More than 5 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme