ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【GAS】現在のシートをPDFにしてメールに添付する方法(コピペでできる)
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- GASで既存のPDFを更新することができます。
- ファイルIDの取得方法や設定方法がわかります。
なので、サクッとマスターして
と答えてあげてください。
ご質問
動画の通りPDF出力したファイルをURLで公開したいと考えています。
その際、以下は実装可能でしょうか?
━━━━━━━━━━
同じPDFファイルとして上書き(更新)= 共有URLは変えない
━━━━━━━━━━
ご教示いただけましたら幸いです。
動画はこちら
シートはこちら
*クリックすることでシートが開きます。(コピーしてお使いください)
DriveAPIの追加
DrvieAPIなるものを使用するのでスクリプトエディタの
サービスに「Drive API」を追加します。
Step1.
①「サービス」をクリックします。
②「Drive API」をクリックします。
③「追加」をクリックします。
ポイント
PDFの更新はこんな感じでできます。
Drive.Files.update(resource, fileID, pdfblob)
例)
Drive.Files.update({ uploadType: 'media' }, fid, pdfblob)
スクリプト
//PDFファイルの生成(サンプル)
function createpdf() {
const fileid = SheetToUpdatePDF()
console.log(fileid)
const sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
sh.getRange("K1").setValue(fileid)
}
//PDFファイルの更新(サンプル)
function updatepdf() {
const sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
const fid = sh.getRange("K1").getValue()
console.log(fid)
SheetToUpdatePDF(fid)
}
/**
* スプレッドシートの特定の範囲をPDFに出力する
* fid ファイルID PDFファイルの更新
* なし PDFファイルの生成
* 戻り値 ファイルID(PDFファイルの生成の場合)
*/
function SheetToUpdatePDF(fid) {
//-------------------------設定------------------------
// const FOLDER_ID = '1LW_KFLABRms9N6JhO96LzWvk-_zkCLGW'
// PDF出力するシートを指定
const SH_NAME = '目次'
// 出力する範囲
const RANGE_F = 'B1' //開始位置
const RANGE_T = 'I20' //終了位置
// サイズ
const SIZE = 'A3'
// 縦横
const TATE = 'true' //横の場合は 'false'
//-------------------------設定------------------------
const shname = SH_NAME + "_1" + ".pdf"
const ss = SpreadsheetApp.getActiveSpreadsheet()
const ssId = ss.getId()
const sheetId = ss.getSheetByName(SH_NAME).getSheetId()
// スプレッドシートをPDF出力するためのURL
const url = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?'
// PDF出力のオプションを設定
const options = 'exportFormat=pdf&format=pdf'
+ '&gid=' + sheetId //PDFにするシートの「シートID」
+ '&portrait=' + TATE //true(縦) or false(横)
+ '&size=' + SIZE //印刷サイズ
+ '&gridlines=false' //グリッドラインの表示有無
// + '&range=' + RANGE_F + '%3A' + RANGE_T //セル範囲を指定 %3A はコロン(:)を表す
+ '&top_margin=0.50' //上の余白
+ '&right_margin=0.50' //右の余白
+ '&bottom_margin=0.50' //下の余白
+ '&left_margin=0.50' //左の余白
+ '&sheetnames=false' //シート名の表示有無
+ '&printtitle=false' //スプレッドシート名の表示有無
+ '&pagenum=UNDEFINED' //ページ番号をどこに入れるか
+ '&scale=1' //1= 標準100%, 2= 幅に合わせる, 3= 高さに合わせる, 4= ページに合わせる
+ '&horizontal_alignment=CENTER'//水平方向の位置
+ '&vertical_alignment=CENTER'//垂直方向の位置
+ '&gridlines=false' //グリッドラインの表示有無
+ '&fzr=false' //固定行の表示有無
+ '&fzc=false' //固定列の表示有無
console.log(options)
const requestUrl = url + options
//API使用のためのOAuth認証
const token = ScriptApp.getOAuthToken()
const params = {
'headers': { 'Authorization': 'Bearer ' + token },
'muteHttpExceptions': true
}
const response = UrlFetchApp.fetch(requestUrl, params)
//Blobオブジェクトを作成
const pdfblob = response.getBlob()
pdfblob.setName(shname) //PDFファイル名を設定
// 指定のフォルダにPDFファイルを作成
// const folder = DriveApp.getFolderById(FOLDER_ID)
//このスプレッドシートと同じフォルダにPDFファイルを作成
const parentFolders = DriveApp.getFileById(ss.getId()).getParents()
const folderId = parentFolders.next().getId()
const folder = DriveApp.getFolderById(folderId)
//ファイルIDの有無により処理が異なる
if (fid) { //ファイルIDがある場合
//PDFファイルの更新
Drive.Files.update({ uploadType: 'media' }, fid, pdfblob)
}
else {
const file = folder.createFile(pdfblob)
return (file.getId())
}
}
詳細は動画をご覧ください
最後までご覧いただきありがとうございます。
つぎはこちら
【GAS基礎講座 14.15.】 ファイル一覧、ファイルのコピー 、一覧をスプレッドシートに出力
ファイルの一覧をスプレッドシートに出力できます。
Google ドライブでファイル一覧の取得方法がわかります。
ファイルのコピー方法がわかります
コメント