Bookmarks

Bookmarks

このガイドでは、Aspose.Words FOSS for .NET を使用して Word 文書内のブックマークを読み取り、挿入、移動、削除する方法を示します。ブックマークは、名前付きの位置またはコンテンツの範囲をマークし、検索、移動、またはさらに編集するための挿入ポイントとして使用できます。Aspose.Words FOSS for .NET は、ブックマークを Bookmark、BookmarkStart、BookmarkEnd クラスで表現し、文書の作成または編集時にブックマークを作成および検索するための DocumentBuilder メソッドを提供します。


ブックマークの読み取り

すべての Range は、Bookmarks プロパティを通じて含まれるブックマークを公開し、このプロパティは BookmarkCollection を返します。Document 自体が Range を公開しているため、doc.Range.Bookmarks は文書内のすべてのブックマークを返します。BookmarkCollection インデクサー — bookmarks[bookmarkName] — を使用して名前で特定のブックマークを検索し、Count で存在数を確認するか、GetEnumerator() でコレクション全体を走査します。各 Bookmark は、その Name と、Text を通じて囲まれたテキストを公開します。


DocumentBuilder を使用したブックマークの挿入

DocumentBuilder は、文書を書いている間にブックマークを作成する一般的な方法です。コンテンツを挿入する前に StartBookmark(bookmarkName) を呼び出し、後で EndBookmark(bookmarkName) を呼び出します — ビルダーはその間に書かれたすべてをブックマークされた範囲としてラップします。テーブル列の範囲の場合は、代わりに StartColumnBookmark(bookmarkName) と EndColumnBookmark(bookmarkName) を使用します。結果として得られる Bookmark.IsColumn は true であり、FirstColumn と LastColumn がマークされた列の範囲を特定します。既存のブックマークにビルダーを再配置してさらに編集するには、MoveToBookmark(bookmarkName) を呼び出すか、ブックマークのどちら側にカーソルを置くかを制御できるオーバーロード MoveToBookmark(bookmarkName, isStart, isAfter) を使用します。


文書ツリーにおけるブックマーク構造

ブックマークはドキュメントツリー内でノードのペアとして表されます: BookmarkStart と BookmarkEnd、両方とも BookmarkStart(doc, name) / BookmarkEnd(doc, name) として構築されます。各ノードは論理的な Bookmark オブジェクトにリンクしており、BookmarkStart.Bookmark がそれを返し、Bookmark はその代わりに BookmarkStart と BookmarkEnd のプロパティを公開し、2つの境界ノードを指します。BookmarkStart と BookmarkEnd は普通のノードであるため、GetText()、Clone(isCloneChildren)、GetAncestor(ancestorType) といった標準的なノード操作をサポートし、他のノードタイプと同様にツリーをたどって位置を特定できます。


ブックマークの削除

単一のブックマークの開始および終了マーカーを削除するには Bookmark.Remove() を呼び出します — これによりブックマーク自体が削除され、囲まれたドキュメント内容は残ります。複数のブックマークを一括で削除するには、BookmarkCollection.Remove(bookmark)、Remove(bookmarkName)、RemoveAt(index)、または Clear() を使用して、範囲内のすべてのブックマークを一度に削除します。


ヒントとベストプラクティス

  • 対象のブックマーク名が既に分かっている場合は、手動で反復処理するよりも BookmarkCollection インデクサ(bookmarks["BookmarkName"])を使用する方が望ましいです。
  • 常に同じ名前の StartBookmark(name) 呼び出しと対応する EndBookmark(name) 呼び出しをペアにしてください — ペアが一致しないとブックマークが不完全なままになります。
  • FirstColumn または LastColumn を読む前に Bookmark.IsColumn を確認してください — これら二つのプロパティは StartColumnBookmark/EndColumnBookmark で作成された列ブックマークに対してのみ意味があります。
  • Bookmark.Remove() はブックマークのマーカーだけを削除し、囲まれたテキストは削除しません。そのため、ブックマークを削除してもドキュメントの内容が消えることはありません。
  • 手動でノードツリーを検索してBookmarkStartを探す代わりに、DocumentBuilder.MoveToBookmark()を使用してビルダーのカーソルを既知の位置にジャンプさせます。

一般的な問題

問題原因修正
BookmarkCollection インデクサは名前検索で null を返します検索対象の範囲にブックマーク名が存在しません正確な大文字小文字を区別した名前を確認するため、まず GetEnumerator() で名前を一覧表示してください
挿入されたコンテンツはブックマークされていませんEndBookmark() が呼び出されていないか、StartBookmark() とは異なる名前で呼び出されています常に StartBookmark(name) と EndBookmark(name) を同一の名前文字列で一致させる
列ブックマークデータが正しくないように見える先に IsColumn を確認せずに FirstColumn/LastColumn を読み取るBookmark.IsColumn が true のときのみ、FirstColumn/LastColumn を解釈する

FAQ

ドキュメント内のすべてのブックマークを取得するにはどうすればよいですか?

doc.Range.Bookmarks を読み取ります。これにより、ドキュメント全体をカバーするBookmarkCollectionが返されます。

テキスト範囲ではなく、列単位でテーブルの一部をブックマークできますか?

はい — DocumentBuilder.StartColumnBookmark(bookmarkName) と EndColumnBookmark(bookmarkName) を使用します。生成されたブックマークは、IsColumn が true に設定され、FirstColumn/LastColumn が列範囲を示します。

ブックマークを削除すると、そのマークされたテキストも削除されますか?

No. Bookmark.Remove() は BookmarkStart/BookmarkEnd マーカーノードだけを削除します;間のドキュメント内容はそのまま残ります。

既存のブックマークへ DocumentBuilder カーソルを移動するにはどうすればよいですか?

カーソルがブックマークの先頭に位置するか末尾に位置するかを制御するには、DocumentBuilder.MoveToBookmark(bookmarkName) を呼び出すか、MoveToBookmark(bookmarkName, isStart, isAfter) を使用してください。

BookmarkCollection.Remove() のオーバーロード間の違いは何ですか?

Remove(bookmark) は Bookmark オブジェクトを受け取り、Remove(bookmarkName) はその名前を受け取り、RemoveAt(index) はコレクション内の位置を受け取ります — これら3つはすべて単一のブックマークを削除し、Clear() はコレクション内のすべてのブックマークを削除します。


API Reference の概要

クラス / メソッド説明
Bookmark単一のブックマークを表し、Name、Text、IsColumn、FirstColumn、LastColumn、および Remove() を公開する
BookmarkCollectionブックマークは Range にあります; 名前、Remove()、RemoveAt()、Clear()、Count によるインデクサー
BookmarkStart / BookmarkEndブックマークの境界を示すドキュメントノード; Bookmark.BookmarkStart/Bookmark.BookmarkEnd 経由でリンクバック
Range.Bookmarks指定された範囲の BookmarkCollection を返します、全体ドキュメント用の doc.Range.Bookmarks を含みます
DocumentBuilder.StartBookmark() / EndBookmark()挿入されたコンテンツを名前付きブックマークでラップする
DocumentBuilder.StartColumnBookmark() / EndColumnBookmark()テーブル列の範囲をブックマークとしてマークする
DocumentBuilder.MoveToBookmark()ビルダーのカーソルを既存のブックマークに配置する

参照

 日本語