GoogleSlideでGASのスクリプトを実行する場合
GoogleSlideの拡張機能
→ ツール
からGASで登録した関数を実行できるが、GASで使える関数の中に現在自身が表示させているページを取得するような関数はなかった
しかしながら、特定のページに対して何か作用させたいというのはケースとしてはあるので、UIのpromptを用いてページ番号を指定できるようにしてみた
Class Ui | Apps Script | Google for Developers
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
みたいな関数が欲しい…