2021/10/19に更新

【GASで効率化】指定した種類のスライドオブジェクトをすべて選択する

スライド小技実験的

現在アクティブなスライドに存在する「特定の種類(シェイプ、線、画像など)のオブジェクト」をすべて選択するGoogle Apps Scriptです。種類はポップアップウィンドウで指定します。線など選択が面倒なオブジェクトをすべて選択&書式設定などが可能になります。

こんな悩みを解決します


  • スライドにあるシェイプ、線、画像などの書式をまとめて変更したいが、1つずつ選択するのが大変
  • 細かいオブジェクトがたくさんあり、選択するのが困難

用意するもの


特にありません。今お使いのスライドに組み込めます。

このスクリプトで出来ること


  • 現在のスライドに存在する、指定した種類のオブジェクトをまとめて選択することができます。
  • 種類はポップアップウィンドウで入力します。指定出来るのは以下の種類です。
  • SHAPE : 四角形などのシェイプ
  • IMAGE : 貼り付けた画像
  • LINE : 線
  • TABLE : 表
  • VIDEO : 動画
  • SHEETS_CHART : スプレッドシートのグラフ
  • WORD_ART : ワードアート

使い方


1.スクリプトを実行

上部のメニューから「指定したオブジェクトタイプをすべて選択」を実行します。
実行前にスライドのオブジェクトを1つ選択しておいてください。どの種類でも構いません。

2.消したいオブジェクトの種類を入力

ポップアップウィンドウで、選択したいオブジェクトの種類を入力します。
大文字でも小文字でも構いません。
今回は「image」と入力して、画像をすべて選択させてみます。

指定されたオブジェクトが見つかると、「N個のオブジェクトを選択します」とメッセージが表示されます。

4個の画像オブジェクトが選択されました。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00015/index.html
 */

function onOpen() {
  var ui = SlidesApp.getUi();

  // メニューの表示名
  var menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('指定したオブジェクトタイプを全て選択', 'selectByObjectType');

  // メニューを画面に追加する
  menu.addToUi();
}


function selectByObjectType() {

  // 開いているプレゼンテーションを取得
  const presentation = SlidesApp.getActivePresentation();

  // 選択している箇所がスライド内オブジェクトではない場合は処理できないので終了する
  const selection = SlidesApp.getActivePresentation().getSelection();
  if (selection.getSelectionType() != SlidesApp.SelectionType.PAGE_ELEMENT && selection.getSelectionType() != SlidesApp.SelectionType.TEXT) {
    SlidesApp.getUi().alert('スライド内のオブジェクトを選択してください。');
    return;
  }

  // アクティブなスライドの要素を取得
  const active_slide = presentation.getSelection().getCurrentPage().asSlide();
  const elements = active_slide.getPageElements();

  // 対象のオブジェクトタイプをユーザ入力させる
  let ui = SlidesApp.getUi();
  let response = ui.prompt('選択するオブジェクトのタイプを入力してください', 'SHAPE/IMAGE/LINE/TABLE/VIDEO/SHEETS_CHART/WORD_ART', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたら or 空欄の場合は何もせず終了
  if (response.getSelectedButton() == ui.Button.CANCEL || response.getResponseText() == '') {
    return;
  }

  // select(true/false)で使うため、ヒットした数を記録する
  let match_count = 0;

  // オブジェクトの数だけループ。入力されたタイプと一致したものは選択していく
  for (var i = 0; i < elements.length; i++) {

    let element_type = elements[i].getPageElementType().toString();

    // マッチパターンに変数を使いたいので正規表現を作成
    regexp = new RegExp(response.getResponseText(), 'i');

    if (element_type.match(regexp)) {

      if (match_count == 0) {
        // 最初に見つかったものはselect(true)で選択することで、スクリプト実行前に選択されているオブジェクトの選択状態を外す
        elements[i].select(true);
      } else {
        // 2個め以降はselect(false)で複数選択していく
        elements[i].select(false);
      }
      match_count++;
    }
  }

  // 結果を表示する
  if (match_count > 0) {
    SlidesApp.getUi().alert(match_count + '個の' + response.getResponseText() + 'オブジェクトを選択します');
  } else {
    SlidesApp.getUi().alert(response.getResponseText() + 'オブジェクトは見つかりませんでした');
  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp