ドキュメント情報

ドキュメント情報

ドキュメント情報

このガイドでは、Aspose.Words FOSS for .NET を使用してドキュメントメタデータの読み取りと書き込み方法を示します。読み込まれたもの、または新規に作成された Document には、コンテンツに加えて 2 種類のメタデータが付随します。組み込みの固定プロパティ (author、title、word count など) のセットと、ユーザーが独自に定義できるオープンエンドのカスタムプロパティのセットです。Aspose.Words FOSS for .NET は、ドキュメント本文内にこのメタデータを表示する Word フィールド — AUTHOR、COMMENTS、DOCPROPERTY — も実装しており、プロパティ値をライブで更新可能なテキストとして表示できます。


組み込みドキュメントプロパティ

Document.BuiltInDocumentProperties は、標準的な Word メタデータフィールドごとに 1 つのプロパティを持つ BuiltInDocumentProperties コレクションを返します: Author、Title、Subject、Comments、Category、Company、Manager、Keywords、CreatedTime、LastSavedTime、LastSavedBy、LastPrinted、RevisionNumber、TotalEditingTime、および統計情報として Pages、Words、Characters、CharactersWithSpaces、Paragraphs、Lines が含まれます。BuiltInDocumentProperties は DocumentPropertyCollection から派生しているため、インデクサー Contains() による名前検索や IndexOf()、および GetEnumerator() による列挙もサポートします。プレーンテキスト入力を扱う場合、同じコレクションが PlainTextDocument.BuiltInDocumentProperties 上でも公開されます。


カスタムドキュメントプロパティ

Document.CustomDocumentProperties は、アプリケーションが独自に定義するプロパティ用の CustomDocumentProperties コレクションを返します。これは、Word が組み込みセットと共に保存する任意の名前/値のペアです。Add(name, value) を使用してプロパティを追加します。このメソッドは CustomDocumentProperties にわたってオーバーロードされており、プロパティが保持できる値の型を指定できます。インデクサー(例: properties[name])で名前から取得し、Remove(name)、RemoveAt(index)、または Clear() でエントリを削除します。AddLinkToContent(name, linkSource) は、固定値として保存されるのではなく、ブックマークやドキュメント内の範囲にリンクされた値を持つプロパティを作成します。

組み込みでもカスタムでも、いずれかのコレクション内のすべてのエントリは DocumentProperty であり、Name、Value、および Type(PropertyType 値: String、Number、Double、Boolean、DateTime、StringArray、ObjectArray、ByteArray、または Other)を公開します。さらに、リンクされたプロパティ用に IsLinkToContent と LinkSource があります。DocumentProperty は、目的の .NET 型で基礎となる値を取得するための ToString()、ToInt()、ToDouble()、ToDateTime()、ToBool()、ToByteArray() といった変換ヘルパーを提供します。


文書情報フィールド

3つの Field サブクラスは、文書本文内にフィールドとして文書メタデータを公開します: FieldAuthor(AUTHOR フィールドで、AuthorName プロパティを持ちます)、FieldComments(COMMENTS フィールドで、Text プロパティを持ちます)、および FieldDocProperty(DOCPROPERTY フィールドで、名前付き文書プロパティ(組み込みまたはカスタム)を文書に読み込みます)。すべての Field と同様に、これら3つは基本的な Field ライフサイクルを共有します: GetFieldCode() は基になるフィールドコードを読み取り、Result / DisplayResult は最後に計算された値を読み取り、Update() は値を再計算し、Unlink() はフィールドを静的な結果に置き換え、Remove() はそれを削除します。DocumentBuilder.InsertField(fieldCode) を使用して文書情報フィールドを挿入します — 例えば AUTHOR や DOCPROPERTY "Company" のフィールドコード、あるいは InsertField(fieldType, updateField) のオーバーロードで FieldType 値(FieldType.FieldAuthor、FieldType.FieldComments、FieldType.FieldDocProperty など)を使用します。

FieldDocProperty はバインドされた文書プロパティをそのまま読み取るため、基になる BuiltInDocumentProperties または CustomDocumentProperties の値を変更し、Update() を呼び出す、あるいは Document.UpdateFields() で文書内のすべてのフィールドを一度に更新すると、新しい値がフィールドの表示結果に反映されます。


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

  • 保存する前に Title、Author、Subject などの組み込みプロパティを設定します — Word やその他のアプリケーションは文書一覧や検索インデックス作成のために BuiltInDocumentProperties からこれらを読み取ります。
  • DocumentProperty.Type を使用して、特定の変換ヘルパー(ToInt()、ToDateTime() など)を呼び出す前にプロパティの PropertyType を確認し、自分で作成していないプロパティでの変換不一致を防ぎます。
  • AddLinkToContent() は固定値ではなく、ブックマークされた範囲などの文書コンテンツとカスタムプロパティを同期させます — プロパティが常に文書内の現在の内容を反映すべき場合に使用してください。
  • 文書プロパティを変更した後に Document.UpdateFields() を呼び出すと、文書本文内に既に存在する FieldDocProperty、FieldAuthor、または FieldComments フィールドが新しい値を取得します。
  • BuiltInDocumentProperties と CustomDocumentProperties は PlainTextDocument と Document の両方で利用可能です。そのため、読み込まれたコンテンツがプレーンテキストであってもメタデータは往復します。

一般的な問題

問題原因修正
インデクサはカスタムプロパティに対して null を返しますプロパティはまだ追加されていませんまず CustomDocumentProperties.Add(name, value) を呼び出すか、読み取る前に Contains(name) を確認してください
FieldDocProperty はプロパティを変更した後に古い値を示しますフィールドが更新されませんでしたフィールドに対して Update() を呼び出すか、ドキュメント内のすべてのフィールドを更新するには Document.UpdateFields() を使用してください
DocumentProperty.ToInt() / ToDateTime() が例外をスローしますプロパティの実際の Type が要求された変換と一致しませんどの変換ヘルパーを呼び出すか選択する前に、DocumentProperty.Type を確認してください

FAQ

組み込みドキュメントプロパティとカスタムドキュメントプロパティの違いは何ですか?

組み込みプロパティ(Document.BuiltInDocumentProperties)は OOXML フォーマットで定義された固定セットであり、Author、Title、Pages などがあります。カスタムプロパティ(Document.CustomDocumentProperties)は、Add() を使用して追加される、アプリケーション定義のオープンエンドな名前/値ペアのセットです。

カスタムプロパティが固定値ではなくドキュメントの内容を追跡するようにするにはどうすればよいですか?

CustomDocumentProperties.AddLinkToContent(name, linkSource) を使用します。これにより、プロパティの値が静的な値として保存されるのではなく、ドキュメント内のブックマークや範囲にリンクされます。

ドキュメントプロパティを更新すると、それを表示しているフィールドも自動的に更新されますか?

いいえ — 特定のフィールドで Update() を呼び出すか、Document.UpdateFields() を使用してドキュメント内のすべてのフィールドを再計算します。これには FieldDocProperty、FieldAuthor、および FieldComments のインスタンスが含まれます。

プレーンテキストドキュメントからドキュメントプロパティを読み取ることはできますか?

はい。PlainTextDocument は、Document と同じ BuiltInDocumentProperties と CustomDocumentProperties プロパティを公開します。


API Reference の概要

クラス / メソッド説明
Document.BuiltInDocumentProperties標準 OOXML メタデータコレクション (Author, Title, Pages など)
Document.CustomDocumentPropertiesアプリケーション定義の名前/値プロパティ コレクション
CustomDocumentProperties.Add() / 名前でインデクサー / AddLinkToContent()カスタム プロパティを追加、取得、またはコンテンツリンクする
DocumentProperty単一プロパティ エントリ; Value、Type、および ToString()/ToInt()/ToDouble()/ToDateTime()/ToBool()/ToByteArray() 変換ヘルパー
FieldAuthor / FieldComments / FieldDocPropertyAUTHOR、COMMENTS、および DOCPROPERTY フィールド; Update()、Result、GetFieldCode()
DocumentBuilder.InsertField()フィールドコードまたは FieldType によってフィールドを挿入します

参照

 日本語