GASでスプレッドシートをPDF化して保存→保存したPDFのURLを取得
解決したいこと
① GASでスプレッドシートをPDF化して保存
② 保存したPDFのURLを取得
以上を実現するスクリプトを書きたいと考えています。
②については、保存されたPDFを右クリックし「リンクを取得」からURLを取得することもできるとは思いますが、1クリックで一連の動作ができるのが理想です。
なお、本件は請求書の社内確認に使用する簡易的なシステムです。
スクリプトを埋め込んでいるスプレッドシートは請求書になります。
参考にした記事
こちらの記事を参照し①については実装ができました。
現在のスクリプト
現在のスクリプトは以下の通りです。
function savePdf(){
//PDFの保存先
//★★★フォルダーIDを入力してください★★★
let folderId = "フォルダーIDを入力";
//アクティブなスプレッドシートを取得する
let ss = SpreadsheetApp.getActiveSpreadsheet();
//スプレッドシートIDを取得する
let ssId = ss.getId();
//シートIDを取得する
let shId = ss.getActiveSheet().getSheetId();
//B4セルの会社名を取得する
let fileCorpName = ss.getActiveSheet().getRange("B4").getValue();
//K4セルの請求書番号を取得する
let fileNum = ss.getActiveSheet().getRange("K4").getValue();
//★★★PDFのファイル名を入力してください★★★
//※ポイント: ファイル名が重複しないようにしましょう
let fileName = "請求書_管理番号" + fileNum + "(" + fileCorpName + "御中)" ;
//関数createPdfを実行し、PDFを作成して保存する
createPdf(folderId, ssId, shId, fileName);
}
//PDFを作成し指定したフォルダーに保存する関数
//以下4つの引数を指定する必要がある
//1: フォルダーID (folderId)
//2: スプレッドシートID (ssId)
//3: シートID (shId)
//4: ファイル名 (fileName)
function createPdf(folderId, ssId, shId, fileName){
//PDFを作成するためのベースとなるURL
let baseUrl = "https://docs.google.com/spreadsheets/d/"
+ ssId
+ "/export?gid="
+ shId;
//★★★自由にカスタマイズしてください★★★
//PDFのオプションを指定
let pdfOptions = "&exportFormat=pdf&format=pdf"
+ "&size=A4" //用紙サイズ (A4)
+ "&portrait=true" //用紙の向き true: 縦向き / false: 横向き
+ "&fitw=true" //ページ幅を用紙にフィットさせるか true: フィットさせる / false: 原寸大
+ "&top_margin=0.1" //上の余白
+ "&right_margin=0.15" //右の余白
+ "&bottom_margin=0.1" //下の余白
+ "&left_margin=0.15" //左の余白
+ "&horizontal_alignment=CENTER" //水平方向の位置
+ "&vertical_alignment=TOP" //垂直方向の位置
+ "&printtitle=false" //スプレッドシート名の表示有無
+ "&sheetnames=false" //シート名の表示有無
+ "&gridlines=false" //グリッドラインの表示有無
+ "&fzr=false" //固定行の表示有無
+ "&fzc=false" //固定列の表示有無
+ "&range=A1%3AL47" //範囲の指定;
//PDFを作成するためのURL
let url = baseUrl + pdfOptions;
//アクセストークンを取得する
let token = ScriptApp.getOAuthToken();
//headersにアクセストークンを格納する
let options = {
headers: {
'Authorization': 'Bearer ' + token
}
};
//PDFを作成する
let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');
//PDFの保存先フォルダー
//フォルダーIDは引数のfolderIdを使用します
let folder = DriveApp.getFolderById(folderId);
//PDFを指定したフォルダに保存する
folder.createFile(blob);
}
発生している問題・エラー
②の実装に向けていくつか記事を参照していますが、どれもうまく動作しません。
参照していた記事
みなさんにアドバイスいただきたいこと
②の実装に向けて追加すべきスクリプトや、そもそも違うアプローチでの実現方法がありましたらご教示いただけますと幸いです。
何卒宜しくお願い致します。
0