どうも。つじけ(tsujikenzo)です。このシリーズでは「業務マニュアルとアセスメントシートを(同時に)作ろう」についてお送りしています。全7回の予定で、今日は第3回目です。
前回のおさらい
さて、前回は「マニュアルの作成の仕方」をご説明し、簡単な「Document API」を叩いてみました。
今回は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()メソッドです。
戻り値はEnum ParagraphHeadingオブジェクトです。Enumについて簡単な記事を書きましたのでこちらもご参照ください。(今は読む必要はありません)
Enum ParagraphHeadingオブジェクトには様々な値が定義されていますが、現時点では下記9つのプロパティのいずれかが定義されていることを理解しましょう。
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というちょっと特殊なオブジェクトが登場して手こずりましたが、無事に見出しスタイルを取得することができました。
次回は「アセスメントシート」を作成したいと思います。