notebook

都内でWEB系エンジニアやってます。

GoogleSlideのGASで操作対象のページ番号を入力する処理

GoogleSlideでGASのスクリプトを実行する場合

GoogleSlideの拡張機能ツールからGASで登録した関数を実行できるが、GASで使える関数の中に現在自身が表示させているページを取得するような関数はなかった

しかしながら、特定のページに対して何か作用させたいというのはケースとしてはあるので、UIのpromptを用いてページ番号を指定できるようにしてみた

Class Ui  |  Apps Script  |  Google for Developers

developers.google.com

uiのドキュメントは上記

操作対象ページのIndex取得

  • 操作対象のページ番号を入力してもらう
    • 数値以外ならエラー
    • 存在しないページ番号はエラー

次のような感じになった

  • 操作対象ページのIndex取得処理
function getTargetPageIndex(title) {
  const ui = SlidesApp.getUi()
  const res = ui.prompt(title,"Please Input Target Page Number?", ui.ButtonSet.OK_CANCEL)

  if (res.getSelectedButton() === ui.Button.CANCEL){
    throw new Error('Cancel')
  }

  const number = parseInt(res.getResponseText())

  if (Number.isNaN(number)) {
    throw new Error('Please Input Number')
  }

  const pageIndex = number - 1

  const presentation = SlidesApp.getActivePresentation()
  const slide = presentation.getSlides()[pageIndex]
  
  if (slide === undefined) {
    throw new Error('Please Input Exist Page Number')
  }

  return pageIndex
}

各種エラーのときはthrowでメッセージが出るようになっている

また、呼び出し側からどんなスクリプトなのか表示させたかったためtitleを渡せるようにした

  • 呼び出し側
function hoge() {
  const presentation = SlidesApp.getActivePresentation()
  // 渡しているのはプロンプトのタイトル
  const pageIndex = getTargetPageIndex('Update TOC Link Page Number')

  const slides = presentation.getSlides()
  const targetSlide = slides[pageIndex]

  // 対象のスライドに操作処理を記述する
}
  • 入力画面

こんな感じになる

  • エラー時

入力したら対象ページを特定して呼び出し側でスライドに対して変更するなり何なりの処理を入れる

おわり

操作対象スライドのページ番号指定は単発の実行ならスクリプト中に直で番号を書いても問題ないが、アドオンとしてスクリプトを実行したりする場合には欲しくなってくる

できればcurrentPageみたいな関数が欲しい…