[document][GAS]業務マニュアルとアセスメントシートを作ろう-その3-

GAS

どうも。つじけ(tsujikenzo)です。このシリーズでは「業務マニュアルとアセスメントシートを(同時に)作ろう」についてお送りしています。全7回の予定で、今日は第3回目です。

前回のおさらい

さて、前回は「マニュアルの作成の仕方」をご説明し、簡単な「Document API」を叩いてみました。

[document][GAS]業務マニュアルとアセスメントシートを作ろう-その2-
どうも。つじけ(tsujikenzo)です。このシリーズでは「業務マニュアルとアセスメントシートを(同時に)作ろう」についてお送りしています。全7回の予定で、今日は第2回目です。前回のおさらい前回は「社内に(ちゃんと読まれてい...

今回はDocument APIの続きで「マニュアルの見出しスタイルを抽出しよう」をお送りします。

段落から見出しスタイル一覧を取得する

今完成しているコードはこのようなコードで、ドキュメントのタイトル本文(プレーン)がログで取れていました。

function documentConverter() {
const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
const title = doc.getName();
const body = doc.getBody().getText();

console.log(title);
console.log(body);
}

段落一覧を取得する

下記のコードではdocにDocumentオブジェクト、bodyにはBodyオブジェクト(正式名称はDocumentBodySectionオブジェクトで、HeaderSection、FooterSection、およびFootnoteSection要素を除くすべての要素が含まれているオブジェクト)が格納されています。

const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
const body = doc.getBody();

ドキュメントの本文を操作する時、その多くはまず段落を操作することになります。段落とは、文章の後にEnterキーで改行が挿入された文章の塊のことです。例え1行だとしてもEnterキーで改行されていればそれは「段落」となります。キャプチャにも段落がついてしまうのでご注意ください。

Bodyクラスには段落一覧を取得する.getParagraphs()メソッドが用意されていますので、Bodyオブジェクトに含まれる段落一覧を取得することができます。

const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
const paragraphs = doc.getBody().getParagraphs();

console.log(paragraphs);
Logger.log(paragraphs);

このようなログが取れているでしょうか。お手元のマニュアルの段落の数だけ「{}」もしくは「Paragraphオブジェクト」配列で取得できています。(前者の{}もParagraphオブジェクトで、外見が違うだけです。)

見出しスタイルを取得する

全ての段落には「標準テキスト」「タイトル」「見出し1」のような見出しスタイルが設定されています。

見出しスタイルを取得するのはParagraphクラス.getHeading()メソッドです。

Class Paragraph  |  Apps Script  |  Google for Developers

戻り値はEnum ParagraphHeadingオブジェクトです。Enumについて簡単な記事を書きましたのでこちらもご参照ください。(今は読む必要はありません)

[GAS]Enumってなに?(初級編)
どうも。つじけ(tsujikenzo)です。このシリーズではEnum(イーナム)について初級・中級の2回に渡ってお送りします。今日は1回目で「Enum初級編」についてお届けします。はじめましてEnumさん「Enumがなんなのか?」という...

Enum ParagraphHeadingオブジェクトには様々な値が定義されていますが、現時点では下記9つのプロパティのいずれかが定義されていることを理解しましょう。

Enum ParagraphHeading  |  Apps Script  |  Google for Developers

Enum ParagraphHeadingオブジェクトに定義されているプロパティの確認方法は.toJSON()メソッドです。コードで確認してみましょう。

const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
const paragraphs = doc.getBody().getParagraphs(); //[{},{},...,{}]

//paragraphs[0]に定義されているプロパティを確認する
console.log(paragraphs[0].getHeading().toJSON()); 
//こちらの書き方でも構いません

console.log(JSON.parse(JSON.stringify(paragraphs[0].getHeading())));

プロパティは「HEADING2」であることが確認できました。

見出しスタイル一覧を取得する

for文を回して、ドキュメント全体の見出しスタイルの一覧を取得します。

const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
const paragraphs = doc.getBody().getParagraphs(); //[{},{},...,{}]

for (const parag of paragraphs){
  console.log(JSON.stringify(parag.getHeading()));
}

しかしこのままだと[標準テキスト]の見出しスタイルも抽出してしまいます(数が多いです💦)ので、条件判定を加えて[見出し2][見出し3][見出し4]だけを抽出します。

const doc = DocumentApp.openById('作成したマニュアルのドキュメントID');
const paragraphs = doc.getBody().getParagraphs(); //[{},{},...,{}]

for (const parag of paragraphs){
  if (parag.getHeading().toJSON() !== "NORMAL"){
      console.log(parag.getHeading().toJSON());
  }
}
見出しスタイルと数が一致していますね。

Paragraphオブジェクト.getHeading().toJSON() メソッドで段落情報(見出しスタイル)を示すプロパティ[TITLE][HEADING2]などの値が取得できることを覚えておいてください。値は文字列型(String)です。

まとめ

さて、以上で「マニュアルの見出しスタイルを抽出しよう」をお届けしました。途中Enumというちょっと特殊なオブジェクトが登場して手こずりましたが、無事に見出しスタイルを取得することができました。

次回は「アセスメントシート」を作成したいと思います。

このシリーズの目次

  1. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その1-
  2. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その2-
  3. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その3-
  4. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その4-
  5. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その5-
  6. [document][GAS]業務マニュアルとアセスメントシートを作ろう-その6-
  7. [ライブラリ][GAS]CreateAssessmentSheet

タイトルとURLをコピーしました