Help us understand the problem. What is going on with this article?

Google SlidesをGoogle Apps Scriptからいじる

More than 1 year has passed since last update.

この記事はWACULアドベントカレンダーの15日目の記事です。

はじめに

こんにちは。私はプログラマではないのですが、業務の都合プログラムを勉強しています。ひょんなことからアドベントカレンダーに誘われたので、初めて記事というものを書いています。

今回とりあげるのはGoogle Slidesです。
このテーマについて書いた記事が少なく手探り状態ですので、何卒ご容赦ください。

以下のサンプル1ページのみのプレゼンテーションを例として使用します。

今回使用するサンプルスライド

この記事のゴール

もともとは、パワポ資料作成に非常に時間がかかるものを何か自動化できないか、というところから出発しました。そのため今回は、

  • テンプレートからの値取得
  • 中身のテキストを書き換える

をゴールに書いていきます。

サンプルコード

テキストボックスの中身を置き換える

概要

  • プレゼンテーション1ページ目のスライドを取得
  • スライドの要素をすべて取得し、for文で1つずつチェック
  • テキストボックスはshapeなので、shapeのオブジェクトにつき中身のテキストを取得
  • テキストがSampleTextのものについて、テキストを削除した上で、Replaced Textを挿入

サンプルコード

function updateShape() {
  var presentationID = "abcdefghijklmnopqrstuvwxyz0123456789"
//  プレゼンテーションIDを指定し、プレゼンテーションを取得
  var presentation = Slides.Presentations.get(presentationID)
//  1ページ目のスライドを取得
  var slide = presentation.slides[0]
//  ページの要素を取得する
  var pageElements = slide["pageElements"]

  for(var i =0;i<pageElements.length;i++){
//    ページ要素を取得
    var element = pageElements[i]
//    オブジェクトのIDを取得
    var objectId = pageElements[i]["objectId"]
    if("shape" in element){
//      テキストボックスを取得
      var shape = element["shape"]
//      中身のテキストを取得
      var content = shape["text"]["textElements"][1]["textRun"]["content"]

      if(content=="SampleText"){
        var text = "Replaced Text"
        var requests=[
//          テキスト削除リクエスト
          {
            "deleteText":{
              "objectId":objectId,
              "textRange":{
                "type":"ALL"
              }
            },
          },
//          テキスト挿入リクエスト
          {
            "insertText":{
              "objectId":objectId,
              "text":text,
              "insertionIndex":0
            }
          }

        ]
        Slides.Presentations.batchUpdate({"requests":requests},presentationID)
      }
    }
  }
}

表の値を更新する

概要

  • プレゼンテーション1ページ目のスライドを取得
  • スライドの要素をすべて取得し、for文で1つずつチェック
  • 表はtableなので、tableのオブジェクトを取得
  • セルの位置を指定し(サンプルスライドの A の部分)中身のテキストを取得
  • Aを削除し、AAAAAを挿入

サンプルコード

function updateTable() {
  var presentationID = "abcdefghijklmnopqrstuvwxyz0123456789"
//  プレゼンテーションIDを指定し、プレゼンテーションを取得
  var presentation = Slides.Presentations.get(presentationID)
//  1ページ目のスライドを取得
  var slide = presentation.slides[0]
//  ページの要素を取得する
  var pageElements = slide["pageElements"]

  for(var i =0;i<pageElements.length;i++){
//    ページ要素を取得
    var element = pageElements[i]
//    オブジェクトのIDを取得
    var objectId = pageElements[i]["objectId"]

    if("table"in element){
      var table =element["table"]
//      置き換えるセルの行、列を指定
      var rowIndex = 1
      var columnIndex = 1
//      指定したセルのテキストを取得
      var content = table["tableRows"][0]["tableCells"][rowIndex]["text"]["textElements"][columnIndex]["textRun"]["content"]

      var text = "AAAAA"
      var requests=[
        {
          "deleteText":{
            "objectId":objectId,
            "cellLocation":{
              "rowIndex":rowIndex,
              "columnIndex":columnIndex
            },
            "textRange":{
              "type":"ALL"
            }
          },
        },{
          "insertText":{
            "objectId":objectId,
            "cellLocation":{
              "rowIndex":rowIndex,
              "columnIndex":columnIndex
            },
            "text":text,
            "insertionIndex":0
          }
        }
      ]
      Slides.Presentations.batchUpdate({"requests":requests},presentationID)
    }
  }
}

まとめ

結局のところ、とりあえずデータを取得してみて、ログを出してそれを読み解きはじめたあたりから進捗が生まれてきたなという感じです。いい勉強になりました。

私にとっては今回の記事は十分に成果といえるところです。パワポ自動化を急かされているので、パワポ作成を自動化すべくもう少し頑張ります。

chubflat
wacul
人工知能でWebサイトの課題を発見する AIアナリスト https://wacul-ai.com を開発しています
https://wacul.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした