074.【Id】見出しをセクションマーカーにする
こんな感じの柱をつくるとき、セクションマーカーを使うことが多いです。
セクションマーカーはとても便利なのですが、
「一つ一つマーカーを設定するのはめんどくさい…」
「項目の増減があったときに設定し忘れそう…」
といった不満や不安がありました。
そこで、特定の段落スタイルが登場したらそのページをセクションの開始ページとし、セクションマーカーを設定するスクリプトを作成しました。
特徴としては、
- 柱の内容が「大見出し+小見出し」になる場合にも対応しています。小見出しを括弧で括ったりもできます。
- 柱の文言を見出し以外の言葉にしたい(例えば「1章目.inddは見出しは無いけれど『はじめに』という柱にしたい」みたいな)ときもあるので、そういったこともできるようにしました。
- 見出しの通し番号やスペース、注番号を削除するなどの整形もできるようにしています。
見出しの段落スタイルや整形内容などの指定はコード内でやっています(テキストを読み込むかたちにすればよかったかな…)。
挙動
- ブックを開いた状態で起動する(複数開いていた場合、1つめのブックが対象となります)
- 1つめのinddを開く
- 最初以外のセクションを全て削除し、最初のセクションもマーカーをリセットする
- 大見出しの段落スタイルで正規表現検索し、ページ昇順でセクションマーカーを設定していく
(1ページ目に見出しが無い場合は、引き続き同じコンテンツが掲載されていると考えて前のinddの最後のセクションマーカーと同じ内容でマーカーを設定する) - 小見出しの段落スタイルで正規表現検索し、ページ降順でセクションマーカーを設定していく
コード
メモ
分かったこと
doc.pages.nextItem()やpreviousItem()は、documentではなくspreadに属するpagesコレクション内での次/前という扱いになる(pageのindexと同じ)。
直感的な意味での次のページ/前のページを取得したい場合は別のアプローチが必要。
分からなかったこと
ページ外のアイテムのparentPageを参照するなど、アクセスした時点でエラーを吐かれる可能性があるときの回避策。
falsyな値にならないので、条件分岐でどうやって逃げたものか分からなかった。
今回はtry~catchで回避したが、ページ外のアイテムにparentPageが無いのはエラーではなく仕様なので、こういうときにtry~catchを使うのは妥当なんだろうか…?という思ってしまう。
積み残し
1ページ内に見出しが複数あった場合の処理。