はじめに
この記事は「Ateam LifeDesign Advent Calendar 2023」で完走賞を狙って25記事書いているうちの15日目の記事です。今年も完走目指して頑張るぞ!
今日はGASからGoogleスライドを操作する方法についてみていきます。
GASからGoogleスライドを操作する方法
GASからGoogleスライドを操作するためにはSlidesクラスを使います。
サンプル
いくつかサンプルコードをあげながら操作についてみていきましょう。
新しいスライドを作成する
新しいGoogleスライドを作成するには、以下のようなコードを使用します。
function createNewSlide() {
var presentation = SlidesApp.create('新しいスライド'); // 新しいプレゼンテーションを作成
var slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK); // レイアウトを指定して新しいスライドを追加
slide.insertTextBox('Hello, Slide!'); // テキストを挿入
}
既存のスライドを開く
GoogleスライドのIDを使用して既存のスライドを開く方法です。
function editSlideText() {
var presentationId = 'スライドのIDを入力';
var presentation = SlidesApp.openById(presentationId); // スライドを開く
}
スライドのテキストを変更する
既存のスライドを開いてテキストを変更します。今回は1枚目のスライドの最初のテキスト要素を変更します。
function editSlideText() {
var presentationId = 'スライドのIDを入力';
var presentation = SlidesApp.openById(presentationId); // スライドを開く
var slides = presentation.getSlides();
var slide = slides[0]; // 1番目のスライドを取得
var shapes = slide.getShapes();
var text = shapes[0].getText(); // 最初のテキスト要素を取得
text.setText('新しいテキスト'); // テキストを変更
}
新しいスライドを挿入する
既存のGoogleスライドに新しいスライドを挿入します。今回は2枚めのスライドを追加します。
function insertNewSlide() {
var presentationId = 'スライドのIDを入力';
var presentation = SlidesApp.openById(presentationId); // スライドを開く
var slides = presentation.getSlides();
var index = 1; // 2番目の位置に新しいスライドを挿入
presentation.insertSlide(index, SlidesApp.PredefinedLayout.TITLE_AND_BODY); // 特定の位置に新しいスライドを挿入
}
作るもの
これらのサンプルを踏まえて、クライアントへの資料の自動作成を簡易的に実現しようと思います。
-
スプレッドシートのA列目にクライアント名がリストとして記載されている
-
資料のテンプレートはGoogleスライドで用意されている
GASを書いていく
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var lastRow = sheet.getLastRow(); // 最終行を取得
ここではスプレッドシートの情報を取得しています。今回何行目までデータがあるかは不明という前提なのでgetLastRow()
でデータが入っている最終行までを見ていくことにします。
const presentationId = 'テンプレートとなるGoogleスライドのID';
var presentation = SlidesApp.openById(presentationId);
テンプレートとなるGoogleスライドのIDを指定して、SlidesApp.openById
を使ってテンプレートファイルを開きます。
for (var i = 1; i <= lastRow; i++) {
var customerName = sheet.getRange('A' + i).getValue();
// スライドの処理が入る
}
A列目にクライアント名が入っているため1行ずつ見て行って、各クライアントごとに処理を行っていきます。
var newPresentation = SlidesApp.create('顧客向け資料_' + customerName);
var deleteSlide = newPresentation.getSlides()[0]; // 1枚目のスライドを取得
deleteSlide.remove(); // 1枚目のスライドを削除
SlidesApp.create
をつかって新規のGoogleスライドを作成します。このときファイル名は'顧客向け資料_' + customerName
で指定します。
また新規でGoogleスライドを作成すると1枚目のスライドがデフォルで作成されるため削除の処理をします。具体的にはnewPresentation.getSlides()[0]
で1枚目のスライドを取得し.remove()
関数を呼び出すことで削除を行います。
// テンプレートのスライドを取得し、新しいスライドにコピー
var slides = presentation.getSlides();
for (var j = 0; j < slides.length; j++) {
newPresentation.appendSlide(slides[j]);
}
続いてテンプレートとなるGoogleスライドからgetSlides()
で各スライドを取得し1つずつループさせながら新しいGoogleスライドにappendSlide
を使ってコピーを生成していきます。
var topSlide = newPresentation.getSlides()[0];
var shapes = topSlide.getShapes();
var text = shapes[1].getText();
text.setText(customerName + '御中'); // 顧客名を挿入
newPresentation.saveAndClose();
そしてコピーが完了したら今回クライアント名を入れたい1枚目のスライドをnewPresentation.getSlides()[0]
を呼び出すことで取得します。そのスライド内にある図形をgetShapes()
で抜き出して2つ目の図形のテキストにクライアント名をsetText
をつかって入れます。そして最後にsaveAndClose()
をつかって編集したスライドの保存を行います。GASからスライドを操作した結果を反映するにはsaveAndClose()
メソッドが必ず必要になるので忘れないようにしましょう。
完成品がこちら
GASのコード
function generateSlidesFromTemplate() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var lastRow = sheet.getLastRow(); // 最終行を取得
const presentationId = 'テンプレートとなるGoogleスライドのID';
var presentation = SlidesApp.openById(presentationId);
for (var i = 1; i <= lastRow; i++) {
var customerName = sheet.getRange('A' + i).getValue();
// 新しいGoogleスライドを作成
var newPresentation = SlidesApp.create('顧客向け資料_' + customerName);
var deleteSlide = newPresentation.getSlides()[0]; // 1枚目のスライドを取得
deleteSlide.remove(); // 1枚目のスライドを削除
// テンプレートのスライドを取得し、新しいスライドにコピー
var slides = presentation.getSlides();
for (var j = 0; j < slides.length; j++) {
newPresentation.appendSlide(slides[j]);
}
var topSlide = newPresentation.getSlides()[0];
var shapes = topSlide.getShapes();
var text = shapes[1].getText();
text.setText(customerName + '御中'); // 顧客名を挿入
newPresentation.saveAndClose();
}
}
実行結果
テンプレートを元に株式会社Aのための資料が作成できました。同様のものが株式会社B、株式会社Cについても作成されていました!
最後に
今日はGASからGoogleスライドを操作する方法についてサンプルコードを添えて見ていきました。Googleスライドは弊社内でもクライアント向けの資料でよく活用しているので今回のようにクライアント名を動的に入れたり、内部の数字をシートに記録した値によって書き換えたりといったことは、実務でも活用できそうです!