みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASでGoogleスライドのプレゼンテーションを楽々作成するテクニックについてシリーズでお伝えしています。
前回の記事はこちら!
シェイプからTextRangeオブジェクトを取得する方法、またそこから文字列を取り出す方法についてお伝えしました。
ただ、スライド上にシェイプがいくつかあったときに、目的のシェイプをズバっと掴んで操作したいですよね…
今回は、「オブジェクトID」というものを使って、そんな悩みを解決していきます。
ということで、GASでGoogleスライドの特定のシェイプをオブジェクトIDで取得する方法です。
では、行ってみましょう!
前回のおさらい
まず、前回のおさらいからです。
紹介したコードはこちら。
function myFunction() { var url ='*****テンプレート用プレゼンテーションのURL*****'; var presentation = SlidesApp.openByUrl(url); var slide = presentation.getSlides()[0]; var shapes = slide.getShapes(); for (var i = 0; i < shapes.length; i++){ var shape = slide.getShapes()[i]; Logger.log('シェイプ内の文字列: %s',shape.getText().asString()); } }
- PresentationオブジェクトをURLで取得
- Slideオブジェクトを配列で取得→インデックス0で1枚目のSlideオブジェクトを取得
- Shapeオブジェクトを配列で取得→ループしてすべてのShapeオブジェクトの文字列を出力
という流れですね。
スライドはページ数とインデックスが連動しているから良いのですが、シェイプについては目的のシェイプのインデックス…ちょっと分かりづらいです。
では、どうすればよいか…?
というのが本日のお題になります。
オブジェクトIDとは
ですが、このお題は実は、簡単に解決できます。
プレゼンテーション上のページ要素(シェイプ、画像、グラフ、表など)はすべて一意のIDを持っていて、それをオブジェクトIDといいます。
そのオブジェクトIDを使って、ズバッとページ要素を取得できてしまうのです。
オブジェクトIDを取得する
シェイプのオブジェクトIDを取得するには、getObjectIdメソッドを使います。
オブジェクトIDは文字列なので、getObjectIdメソッドの戻り値は文字列になります。
オブジェクトIDを調べるコード
では、前回のコードを修正して、オブジェクトIDも取得できるように変更してみましょう。
10行目のLogger.logで出力する内容に、オブジェクトIDを含めてあげれば良いですね。
こんな感じです。
function myFunction() { var url ='*****テンプレート用プレゼンテーションのURL*****'; var presentation = SlidesApp.openByUrl(url); var slide = presentation.getSlides()[0]; var shapes = slide.getShapes(); for (var i = 0; i < shapes.length; i++){ var shape = slide.getShapes()[i]; Logger.log('[%s]: %s',shape.getObjectId(), shape.getText().asString()); } }
ログを確認するとこうなります。
これで各シェイプのオブジェクトIDがわかりましたね!
オブジェクトIDからシェイプを取得する
続いて、この調べたオブジェクトIDから、Shapeオブジェクトを取得する方法を見ていきましょう。
ただ、オブジェクトIDを使って取得できるのは、Shapeオブジェクトではなくて、PageElementオブジェクトになります。
なので、PageElementオブジェクトをまず取得するという段取りからスタートです。
オブジェクトIDでページ要素を取得する
Presentationオブジェクトから、オブジェクトIDでPageElementオブジェクトを取得するには、getPageElementByIdメソッドを使います。
ページ要素をシェイプとして返す
さて、これで目的のシェイプがPageElementオブジェクトとして取得できました。
ただ、実際はShapeオブジェクトとして取得したいのです。
そのような場合は、asShapeメソッドを使います。
これで、目的のシェイプをShapeオブジェクトとして取得できるというわけです。
オブジェクトIDでシェイプを取得するコード
では、実際にオブジェクトIDでシェイプを取得するコードを試してみましょう。
こちらです。
function getShapeByObjectId(){ var url ='*****テンプレート用プレゼンテーションのURL*****'; var presentation = SlidesApp.openByUrl(url); var id = 'g7c06e4895a_0_4'; var shape = presentation.getPageElementById(id).asShape(); Logger.log(shape.getText().asString()); }
実行してログを確認すると、以下のようにきちんと目的のシェイプが取得できたということが確認できますね。
まとめ
以上、GASでGoogleスライドの特定のシェイプをオブジェクトIDで取得する方法をお伝えしました。
ポイントはこちらですね。
- シェイプなどのページ要素は一意のオブジェクトIDを持ち、それで取得できる
- ページ要素をシェイプとして取得するにはasShapeメソッド
次回は、取得したシェイプの文字列に置換処理を行っていきます。
どうぞお楽しみに!
連載目次:GASでGoogleスライドのプレゼンテーションを楽々作成
定例会議用資料、レポート、プレゼンテーションなど、テンプレートをもとにGoogleスライドのプレゼンテーションを作るというお仕事はけっこうあります。全部は無理にしても、いくつかの段取りは、GASを使って自動化できるかも…!?このシリーズでは、そのようなGoogleスライドのプレゼンテーション自動化のアイデアと、スクリプトの書き方を紹介します!- GASでGoogleスライドのプレゼンテーションを操作するはじめの一歩
- GASでGoogleスライドを操作するSlidesサービスの基礎の基礎
- GASでGoogleスライドのSlideオブジェクトの概要とその取得方法
- GASでGoogleスライドのテキストボックスや図形などを取得する方法
- GASでGoogleスライドのテキストボックスの文字列を取得する方法
- GASでGoogleスライドの特定のシェイプをオブジェクトIDで取得する方法
- GASでGoogleスライドのシェイプのテキストを置換する方法
- GASでスプレッドシートのデータをもとにGoogleスライドの文字列を置換する
- GASでGoogleスライドのプレゼンテーションをコピーする方法
- GASでコピーしたGoogleスライドのプレゼンテーションを取得する方法