はじめに
この記事は「Ateam LifeDesign Advent Calendar 2023」で完走賞を狙って25記事書いているうちの14日目の記事です。今年も完走目指して頑張るぞ!
今日はGASからGoogleドキュメントを操作する方法についてみていきます。
GASからGoogleドキュメントを操作する方法
GASからGoogleドキュメントを操作するためにはDocumentAppクラスやDocumentクラスを使います。
サンプル
いくつかサンプルコードをあげながら操作についてみていきましょう。
Googleドキュメントの作成
新しいGoogleドキュメントを作成するには、以下のようなコードを使用します。
function createGoogleDoc() {
var doc = DocumentApp.create('新しいドキュメント'); // ドキュメントの名前を指定して新規作成
var docId = doc.getId(); // ドキュメントのID取得
Logger.log('新しいドキュメントのIDは ' + docId + ' です。');
}
既存のドキュメントを開く
ドキュメントのIDを使用して既存のドキュメントを開く方法です。
function openExistingDocument() {
var docId = 'ここにドキュメントのIDを入力';
var existingDoc = DocumentApp.openById(docId);
}
ドキュメントの本文を取得・編集
ドキュメントの本文を取得し、テキストを追加・編集する方法です。サンプルでは新しい段落を追加してみます。
function editDocumentBody() {
var docId = 'ここにドキュメントのIDを入力';
var doc = DocumentApp.openById(docId);
var body = doc.getBody();
// 新しい段落を追加
body.appendParagraph('新しい段落の追加');
}
テキストのスタイルを変更
ドキュメント内のテキストのスタイルを変更する方法です。
function changeTextStyle() {
var docId = 'ここにドキュメントのIDを入力';
var doc = DocumentApp.openById(docId);
var body = doc.getBody();
// テキストのスタイルを変更
var text = body.editAsText();
text.setBold(10, 20, true); // 10文字目から20文字目までを太字にする
text.setForegroundColor(30, 40, '#FF0000'); // 30文字目から40文字目までを赤色にする
}
作るもの
これらのサンプルを踏まえて、今回はクライアントへの資料の自動作成を簡易的に実現しようと思います。
-
スプレッドシートのA列目にクライアント名がリストとして記載されている
-
資料のテンプレートはGoogleドキュメントで用意されている
GASを書いていく
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
const templateDocId = 'テンプレートとなるドキュメントのID';
var lastRow = sheet.getLastRow(); // 最終行を取得
ここはもう今までやってきたのと同様にスプレッドシートの情報を取得しています。今回何行目までデータがあるかは不明という前提なのでgetLastRow()
でデータが入っている最終行までを見ていくことにします。またテンプレートとなるドキュメントのIDはtemplateDocId
として保持しておいてのちのドキュメント操作のところで使っていきます。
for (var i = 1; i <= lastRow; i++) { // 2行目から開始(1行目はヘッダー)
var customerName = sheet.getRange('A' + i).getValue(); // A列の顧客名を取得
// テンプレートドキュメントから新しいドキュメントを作成
var templateDoc = DocumentApp.openById(templateDocId);
var templateText = templateDoc.getBody().getText();
var updatedText = templateText.replace('{{NAME}}', customerName);
// 新しいドキュメントを作成し、顧客名で命名
var newDoc = DocumentApp.create('顧客向け資料_' + customerName);
var newDocBody = newDoc.getBody();
newDocBody.setText(updatedText);
}
for
ループで1行目からlastRow
行目まで順に見ていきます。sheet.getRange('A' + i).getValue()
でA列からクライアント名を取得します。
DocumentApp.openById(templateDocId)
で先に指定していたドキュメントのIDをもとにテンプレートとなるドキュメントを呼び出します。テンプレートからtemplateDoc.getBody().getText()
でテキスト情報を取得し、replace
関数を使うことで{{NAME}}
となっていたところに実際のクライアント名を置換していきます。
その後、作ったドキュメントを保存するためにDocumentApp.create
で新たなドキュメントを作成します。ドキュメント名はフォーマットに従って顧客向け資料_' + customerName
としています。新たなドキュメントを作成したらそのドキュメントのnewDoc.getBody()
で本文を取得し、そこにsetText(updatedText)
することで更新されたテキストを新しいドキュメントに挿入します。
これにより、スプレッドシートから動的に顧客名を取得し、それぞれの顧客名に対応するドキュメントをテンプレートから生成します。
完成品がこちら
GASのコード
function generateDocumentsFromTemplate() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
const templateDocId = 'テンプレートとなるドキュメントのID';
var lastRow = sheet.getLastRow(); // 最終行を取得
for (var i = 1; i <= lastRow; i++) { // 2行目から開始(1行目はヘッダー)
var customerName = sheet.getRange('A' + i).getValue(); // A列の顧客名を取得
// テンプレートドキュメントから新しいドキュメントを作成
var templateDoc = DocumentApp.openById(templateDocId);
var templateText = templateDoc.getBody().getText();
var updatedText = templateText.replace('{{NAME}}', customerName);
// 新しいドキュメントを作成し、顧客名で命名
var newDoc = DocumentApp.create('顧客向け資料_' + customerName);
var newDocBody = newDoc.getBody();
newDocBody.setText(updatedText);
}
}
実行結果
テンプレートがクライアント名に置き換わりファイルが生成されていることがわかります。同様のものが株式会社B、株式会社Cについても作成されていました!
最後に
今日はGASからGoogleドキュメントを操作する方法についてサンプルコードを添えて見ていきました。今回のサンプルのように一斉に資料を作りたいときや、Googleドキュメントをつかって自動でレポートを作成したいときなどにはこの方法が活用できそうです。