Help us understand the problem. What is going on with this article?

javaScript 文字の切り出しとソート処理のソースコード(googleスライドに対して実行)

前提

  • GASで実行しています
  • 想定しているプレゼンテーションに含まれるスライドの見出しオブジェクトにおける文字は「1-1.sample」のような形式を想定しています。
  • 上記の形式はピリオド以前が数字とハイフン、ピリオド以降がタイトルと換言できます
qiita TitleBeforePeriod.js
// グーグルスライドの任意のプレゼンテーションURLを変数に格納する
const Url = "YOUR_GOOGLE_SLIDE_PRESENTATION_URL"
// 上記変数を元に、プレゼンテーションを開く
const presentation = SlidesApp.openByUrl(Url);
// 開いたプレゼンテーションのスライド全てを変数に格納する 
const slides = presentation.getSlides();
// 関数を実行する
function slideOrganize() {
  // 配列を初期化する
  const title_before_period_list = [];
  // プレゼンテーションの1ページ目は表紙と想定
  // プレゼンテーションの2ページ目は目次と想定
  // getSlides()メソッドで取得したページはインデックス0として取得されているため、3ページ目からスライドを操作したい場合は、要素数2からを対象とする
  for (let count = 2; count <= slides.length-1; count ++){
    // 要素番号countのスライドにおけるタイトルのテキストをString型取得し、title変数へ格納する
    const title = getTitle(count);
    // 引数として渡した文字列のピリオドの位置を返すメソッドを使います
    const period_index = getPeriodIndex(title);
    // 文字の先頭から開始して、ピリオドがある位置までをsubstr()メソッドを使って切り出します
    const organize_title = title.substr(0, period_index)
    // ピリオドの位置までで切り出した文字を配列に格納します
    array.push(organize_title);
  }
  // ピリオドの前までのタイトルをソートする
  title_before_period_list.sort(function(a,b){
    if(a < b) return -1;
    if(a > b) return 1;
    return 0;
  });
  // ソートした結果をLogで出力する
  Logger.log(array);
}

// 引数はタイトルを取得したいスライドの要素番号
function getTitle(page){
  // slides[page]で操作したいスライドを要素番号を使って指定する
  // getShapes()[0]を使って、取得したスライド内にあるオブジェクトの0番目を取得する
  // Returns the list of Shape objects on the page. (引用:参照サイトより)
  // タイトルはスライド内のオブジェクトのうち、0番目にあるオブジェクトである
  const title_object = slides[page].getShapes()[0];
  // title_objectのテキストコンテンツをgetText()を使って取得する
  // テキストコンテンツをString型として取得する
  // asString() : Returns the raw text bounded by this range of the associated shape or table cell. (引用:参照サイトより)
  // page_titleには、スライドの0番目のオブジェクトである見出しオブジェクトのテキストが格納される
  // テキストはString型として格納される
  const page_title = title_object.getText().asString();
  return page_title;  
}
// 引数として受け取った文字列におけるピリオドの位置を返すメソッド
function getPeriodIndex(title) {
  // 単語を一文字ずつ配列に格納します
  const array_string = Array.from(title);
  // 上記の配列のうちピリオドがある位置をindexOf()メソッドで計算します
  const index_period = array_string.indexOf('.');
  // 受け取った文字列におけるピリオドの位置を返します
  return index_period;
}

参照

https://www.w3schools.com/jsref/jsref_substr.asp
https://developers.google.com/apps-script/reference/slides
https://developers.google.com/apps-script/reference/slides/slides-app

kirke
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした