GASでよくあるシステムの一つとして、Googleドキュメントにスプレッドシートのデータを反映させることですよね。
マスタテーブルとしてスプレッドシートを利用して、ドキュメントの一部を置き換えて、一気に複数のファイルを作ることがあると思います。
GoogleドキュメントのIDが固定されていればいいですが、テンプレートファイルが置き換えられたりコピーを利用したりするなどでIDが固定されているとは限りません。
そんなときは、ファイル名を利用して開いてみましょう。
Googleドキュメントをファイル名から開く
前提条件としては、Googleスプレッドシートが保存されているフォルダと同じフォルダ内にそのGoogleドキュメントがあるという状態です。
①フォルダIDを取得する
/*****************************
* 取得用ファイル設定用
*****************************/
const TEMPLATE_DOCUMENT_NAME = "通知書_テンプレート" //(1)
let TEMPLATE_DOCUMENT_ID //(2)
const ssid = SpreadsheetApp.getActiveSpreadsheet().getId() //(3)
const parentFolder = DriveApp.getFileById(ssid).getParents() //(4)
const folderId = parentFolder.next().getId() //(5)
const folder = DriveApp.getFolderById(folderId) //(6)
(1)まずはテンプレートファイルの名前を指定しておきます。
(2)取得するドキュメントのIDを格納する変数を作成します。
(3)現在開かれているGoogleスプレッドシートのIDを取得します。
(4)スプレッドシートが所属するフォルダを取得します
(5)(4)のフォルダのIDを取得します
(6)(5)で取得したIDからフォルダオブジェクトを作成します。
ここまでが準備です。
②テンプレートファイルを指定する
/****************************
* 実行関数
****************************/
function main() {
//テンプレートファイルがない場合、終了
const params = `title = '${TEMPLATE_DOCUMENT_NAME}'` //(1)
const files = folder.searchFiles(params) //(2)
if(files.hasNext()) { //(3)
const file = files.next() //(4)
TEMPLATE_DOCUMENT_ID = file.getId() //(5)
}else {
Browser.msgBox("テンプレートファイルがありません") //(6)
return
}
}
(1)「title = “ファイル名”」として作成するため、変数から取得する
(2)folderオブジェクトのメソッドとしてsearchFileを利用します。引数にファイル名のパラメータを指定する。
(3)ファイルがある場合はこのif文に入ってきます。
(4)ファイルオブジェクトが作成されます。
(5)(4)のファイルからIDを取得して最初に作成した変数に格納します。
(6)テンプレートファイルがなければ、エラーとなり終了します。
このあとはIDを使用してファイルを開いたりすることができますね。
コメント