Google Slides에서 스크립트에서 모든 페이지에 제목을 삽입해 보았습니다.

깨달은 것



첫 투고입니다! 당사는 자료 공유에 Google Slides를 사용합니다.
그러나 Google Slides는 PowerPoint에 비해 아직 사용하고 있는 사람이 적고 애드온도 충실하지 않습니다.
효율성과 자료 디자인 통합을 위해 템플릿도 만들었지만 기본적으로 사용하기가 어렵습니다.

그래서 GAS를 사용하여 기능을 다양하게 늘렸습니다.
이번은 제목의 자동 입력에 관한 것입니다.

표지에 쓴 제목을 모든 페이지에 반영



이번 작성한 것은, 표지에 쓴 자료의 타이틀(이번은 「프레젠테이션의 타이틀」이라고 하고 있습니다)을, 각 페이지의 상부에 자동으로 넣는다고 하는 기능입니다.
물론 1페이지씩 넣어 가도 좋고, 슬라이드를 복사해도 좋지만, 그러면 문언이 바뀌었을 때에 모든 페이지를 수정할 필요가 있어서 귀찮습니다.
슬라이드 마스터로 설정해 두어도 괜찮습니다만, 개인적으로 템플릿의 슬라이드 마스터를 만지는 것은 그다지 좋아하지 않으므로(일반 사용자는 제공된 템플릿의 내용 바꾸는 것만으로, 마스터는 괴롭지 않는 사상 ), 스크립트로 만들었습니다.

프레젠테이션 표지





일반 페이지



페이지 왼쪽 상단에 있는 '프레젠테이션 제목'이 한 번의 클릭으로 추가되거나 업데이트됩니다.


코드


function onOpen(e) {
  SlidesApp.getUi().createAddonMenu()
      .addItem('タイトルを更新する', 'updateTitle')
      .addToUi();
}

function updateTitle(){
  // タイトルテキストを入れる場所設定
  const TITLE_TOP = 5;
  const TITLE_LEFT = 10;
  const TITLE_WIDTH = 600;
  const TITLE_HEIGHT = 20;

  // 全体タイトル情報を取得
  var slides = SlidesApp.getActivePresentation().getSlides();
  var presentationTitle = slides[0].getShapes()[0].getText().asString();

  // 各区切りページのタイトルに全体タイトルを代入
  slides.forEach(function(slide){
    var shapes = slide.getShapes();
    var is_updated = false;

    //存在する場合は更新(場所で判断)
    shapes.forEach(function(shape){
      if(shape.getTop() === TITLE_TOP && shape.getLeft() === TITLE_LEFT){
        shape.getText().setText(presentationTitle);
        is_updated = true;
        return;
      }
    });

    // 存在しない場合は新規作成
    if(!is_updated){
      var insertedTextBox = slide.insertTextBox(presentationTitle, TITLE_LEFT, TITLE_TOP, TITLE_WIDTH, TITLE_HEIGHT);
      // タイトルの書式を設定
      insertedTextBox.getText().getTextStyle()
        .setFontSize(18)
        .setForegroundColor("#FFFFFF");
    }
  });
}

설명



애드온 메뉴에 추가


function onOpen(e) {
  SlidesApp.getUi().createAddonMenu()
      .addItem('タイトルを更新する', 'updateTitle')
      .addToUi();
}

이것을 넣으면 파일을 열 때 메뉴에 이번 기능을 자동으로 추가해줍니다.
(인증을 요구받거나 인증 설정이 필요할지도)

제목 작성 및 갱신


function updateTitle(){
  // タイトルテキストを入れる場所設定
  const TITLE_TOP = 5;
  const TITLE_LEFT = 10;
  const TITLE_WIDTH = 600;
  const TITLE_HEIGHT = 20;

  // 全体タイトル情報を取得
  var slides = SlidesApp.getActivePresentation().getSlides();
  var presentationTitle = slides[0].getShapes()[0].getText().asString();

  // 各区切りページのタイトルに全体タイトルを代入
  slides.forEach(function(slide){
    var shapes = slide.getShapes();
    var is_updated = false;

    //存在する場合は更新(場所で判断)
    shapes.forEach(function(shape){
      if(shape.getTop() === TITLE_TOP && shape.getLeft() === TITLE_LEFT){
        shape.getText().setText(presentationTitle);
        is_updated = true;
        return;
      }
    });

    // 存在しない場合は新規作成
    if(!is_updated){
      var insertedTextBox = slide.insertTextBox(presentationTitle, TITLE_LEFT, TITLE_TOP, TITLE_WIDTH, TITLE_HEIGHT);
      // タイトルの書式を設定
      insertedTextBox.getText().getTextStyle()
        .setFontSize(18)
        .setForegroundColor("#FFFFFF");
    }
  });
}

각 슬라이드를 반복하면서 슬라이드에 포함된 모양이 이번에 설정되었는지 확인합니다.
이번에 설정한 타이틀 셰이프가 없는 경우에는 신규 작성하고, 이미 존재한다(TOP, LEFT 위치에서 판단하고 있습니다) 경우에는 문자를 갱신하고 있습니다.
slide나 shape라는 클래스가 준비되어 있으므로, 이하의 문서를 보면서 하면 아마 할 수 있을까.
htps : //에서 ゔぇぺぺrs. 오, ぇ. 코 m / 아 ps-sc 리 pt

이해하기 어려웠던 곳



슬라이드 클래스와 페이지 클래스



Google Slides의 apps script에서는 다양한 클래스가 준비되어 있습니다만, slide 클래스와 page 클래스가 있어, 어느 쪽이야! 되었습니다.
slide는 보통 슬라이드, page는 슬라이드뿐만 아니라 마스터나 레이아웃 등도 포함한 것이라고 합니다.

텍스트 스타일 설정


      insertedTextBox.getText().getTextStyle()
        .setFontSize(18)
        .setForegroundColor("#FFFFFF");

하지만 getText에서 TextRange 객체를 가져올 수 있지만 거기에서 getTextStyle에서 텍스트 스타일을 가져온 후에 스타일을 설정합니다.
getText에서는 써 있는 문자를 취득할 수 있는 것이 아니라, 문자도 포함한 TextRange 객체를 취할 수 있다고 하는 것이 조금 알기 어려웠습니다.

페이지 번호 얻기



페이지 번호를 스마트하게 얻을 수 없습니다.
(변수 갖게 해 루프로 취득등은 할 수 있었습니다만···)
1 페이지째에는 타이틀 넣지 않게 하고 싶었는데, 이번은 단념.
누군가를 알고 있다면 알려주세요 ( '; ω;`)

기타



그 외에도 목차 기능 만들기, 기능 일람을 사이드 바에 정리하고 있습니다.
이번 첫 투고라는 것으로 우선 투고하고 싶었기 때문에, GAS에 대해서 썼습니다만, 여유가 생기면 그 근처에 대해서도 쓰고 싶네요.

추가



이번, 프리젠의 타이틀을 이하와 같이 취득했습니다만, 사람에 따라서는 shape의 위치등 다르다고 생각하므로 조심해 주세요!
var slides = SlidesApp.getActivePresentation().getSlides();
var presentationTitle = slides[0].getShapes()[0].getText().asString();

좋은 웹페이지 즐겨찾기