2021/10/25に更新

【GASで時短】選択しているオブジェクトを指定回数コピーする

スライド小技実験的

選択しているオブジェクトを、指定した数だけコピーするGoogle Apps Scriptです。大量に同じオブジェクトを作りたいときに便利です。

こんな悩みを解決します


  • スライドのオブジェクトを大量に作りたい。コピー&貼り付けを繰り返すのは面倒くさい。

用意するもの


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

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


  • 選択したオブジェクトを、大量にコピーすることができます。
  • コピーする回数はポップアップウィンドウで入力します。

使い方


1.コピーしたいオブジェクトを選択

コピーしたいオブジェクトを1つ選択します。
複数のオブジェクトを選択した場合は、1つ目のオブジェクトがコピー対象になります。複数のオブジェクトをコピーしたい場合はグループ化したものを選択してください。

2.スクリプトを実行

上部のメニューから「選択中のオブジェクトをN回コピー」を実行します。

3.回数を指定

ポップアップウィンドウにコピーする回数を入力してください。
半角数字で入力する必要があります。
あまりに大きい数字を入れると、GASの実行時間制限(360秒)に引っかかるかもしれません。

OKを押して「スクリプトが終了しました」を表示されたらコピーが完了しています。
コピーされたオブジェクトは、コピー元のオブジェクトと同じ位置にありますのでずらして確認してください。
ずらすとこのように元のオブジェクト + 指定した数(20個)のオブジェクトが存在しています。

4.エラーメッセージ

ポップアップウィンドウに入力された値が、期待した値ではない場合は「回数は半角数字で入力してください」というメッセージが表示されます。

スライド内のオブジェクトが選択されていない場合は、「スライド内のオブジェクトを1つだけ選択してから実行してください」というメッセージが表示されます。

スクリプト


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

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

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

  // メニューに追加するボタン
  menu.addItem('選択中のオブジェクトをN回コピーする', 'copyObjectSpecifiedTimes');

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


function copyObjectSpecifiedTimes() {

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

  // 選択中のオブジェクトを取得
  var selection = presentation.getSelection();

  // 選択されているオブジェクトのタイプを選択
  var selectionType = selection.getSelectionType();

  // スライド内オブジェクトでなければ、エラー
  if (selectionType != SlidesApp.SelectionType.PAGE_ELEMENT) {
    SlidesApp.getUi().alert('スライド内のオブジェクトを1つだけ選択してから実行してください');
    return;
  }

  // ポップアップウィンドウ表示
  let ui = SlidesApp.getUi();
  let response = ui.prompt('コピーする回数を入力してください', '例:10', ui.ButtonSet.OK_CANCEL);

  // CANCELが押されたら処理中止
  if (response.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力された文字列に問題がないかチェック
  if (!response.getResponseText().match(/^[0-9]+$/)) {
    ui.alert('回数は半角数字で入力してください');
    return;
  }

  // アクティブなスライドを取得
  const active_slide = selection.getCurrentPage().asSlide();

  for (var i = 0; i < response.getResponseText(); i++) {
    // オブジェクトををコピー
    active_slide.insertPageElement(selection.getPageElementRange().getPageElements()[0]);
  }

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

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