ドキュメント プロパティの操作
文書プロパティの操作
このガイドでは、Word 文書のメタデータ(Word の情報/プロパティ パネルに表示されるプロパティと、アプリケーションが定義したカスタム値)を読み取り、管理する方法を示します。Document.BuiltInDocumentProperties と Document.CustomDocumentProperties はこれら 2 つのカテゴリを公開し、どちらも最終的には同じ基礎となる DocumentProperty 表現に基づいています。
組み込み文書プロパティ
Document.BuiltInDocumentProperties は、すべての文書で Word が追跡する標準メタデータをカバーする BuiltInDocumentProperties コレクションを返します。Title、Subject、Author、Manager、Company、Category、Keywords、Comments などの記述フィールド;CreatedTime、LastSavedTime、LastPrinted などのタイムスタンプ、LastSavedBy と RevisionNumber;そして Words、Characters、CharactersWithSpaces、Lines、Paragraphs、Pages といった統計情報。Security は文書の保護状態を DocumentSecurity 値として報告し、Template、NameOfApplication、TotalEditingTime は作成環境を記述します。BuiltInDocumentProperties は固定された既知のプロパティ集合であるため、個々の値は名前で検索するのではなく、通常のプロパティ(BuiltInDocumentProperties.Author = "...")として読み書きされます。
カスタム文書プロパティ
Document.CustomDocumentProperties は、Word の組み込みセットに含まれないアプリケーション定義のメタデータ用の CustomDocumentProperties コレクションを返します。複数の Add(name, value) オーバーロードは、名前と型付き値(文字列、数値、ブール値、または日付、オーバーロードに応じて)から新しいプロパティを作成し、AddLinkToContent(name, linkSource) は、静的な値を保持するのではなく、文書内のブックマークされたコンテンツ範囲にリンクされ追跡される値を持つプロパティを作成します。名前によるインデックス付け(例: properties[name])および Contains(name) はプロパティを検索し、IndexOf(name) はその位置を返し、Remove(name)/RemoveAt(index) はそれを削除します。
DocumentProperty オブジェクトと共有コレクションベース
BuiltInDocumentProperties と CustomDocumentProperties は、抽象的な DocumentPropertyCollection から派生しており、インデクサーを名前、GetEnumerator()、Contains(name)、IndexOf(name)、Count で定義します — したがって、組み込みプロパティは固定でカスタムプロパティはオープンエンドであるにもかかわらず、2 つのコレクションは同じ方法で検査されます。個別に、DocumentProperty は Name、型の指定されていない Value、および Type(PropertyType 列挙値: Boolean、DateTime、Double、Number、String、StringArray、ObjectArray、ByteArray、または Other)を持ちます。IsLinkToContent と LinkSource は、プロパティが静的な値を保持するのではなくドキュメント内容にリンクされているかどうかを報告します(上記 AddLinkToContent を参照)。Value が型指定されていないため、DocumentProperty は型付きアクセサー — ToInt()、ToDouble()、ToDateTime()、ToBool()、ToByteArray()、および ToString() — を提供し、明示的なキャストなしで特定の型として読み取ることができます。
文書セキュリティ
BuiltInDocumentProperties.Security は、文書の保護状態を示す DocumentSecurity 値を報告します: None、PasswordProtected、ReadOnlyRecommended、ReadOnlyEnforced、または ReadOnlyExceptAnnotations。これは、ファイルのプロパティから読み取った文書に保存された保護メタデータを反映しています。
ヒントとベストプラクティス
DocumentProperty.Value上で型付きアクセサー (ToInt()、ToDouble()、ToDateTime()、ToBool()) を使用し、型指定されていないobject値を直接キャストしないでください。基礎となるストレージタイプはPropertyTypeによって変わる可能性があるためです。Contains(name)を確認してから、プロパティが存在しない可能性がある場合に名前で(例:properties[name])いずれかのプロパティコレクションにインデックス付けするようにしてください。これにより、欠落プロパティのケースを例外パスとして処理することを回避できます。CustomDocumentProperties.AddLinkToContent(name, linkSource)を使用してください。カスタムプロパティの値が常に文書内のブックマークされた部分を反映すべき場合、内容が変わるたびに静的なカスタムプロパティを手動で再同期させる代わりになります。BuiltInDocumentPropertiesの統計(Words、Characters、Pagesなど)を、常にリアルタイムで計算されたカウントではなく、ファイルのメタデータに保存された値として扱ってください。最終書き込み以降に文書が変更された場合は、明示的に更新してください。BuiltInDocumentProperties.Securityを読み取り、文書の宣言された保護状態を確認し、さらに保護関連の処理が必要かどうかを判断します。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
名前で CustomDocumentProperties コレクションをインデックス付けしても、使用できるものは返されません | このドキュメントにプロパティは存在しません | まず Contains(name) を呼び出すか、適切な Add(name, value) オーバーロードでプロパティを追加してください |
| カスタムプロパティの値を読み取ると、間違った型が返されます | DocumentProperty.Value は型なしの objectです; 呼び出し側は Type と一致しない型を想定していました | 対応する型付きアクセッサ(ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray())を DocumentProperty.Type に基づいて使用してください |
| リンクされたカスタムプロパティの値が古く見えます | プロパティは AddLinkToContent を介してリンクされており、リンクされたコンテンツが変更されたものの、ドキュメントが適切に更新されていません | ブックマークされた linkSource 範囲が依然として意図したコンテンツを反映しているか確認してください |
単語統計(Words, Pages など)は、ドキュメントの実際の現在の内容と一致していません | 組み込みの統計は保存されたメタデータを反映しており、リアルタイムの再集計ではありません | 最新のカウントが必要な場合は、関連する BuiltInDocumentProperties の値を再計算して更新してください |
FAQ
文書の作者とタイトルを取得または設定するにはどうすればよいですか?
Document.BuiltInDocumentProperties.Author と .Title を直接使用してください — それらは Document.BuiltInDocumentProperties からたどれる BuiltInDocumentProperties コレクションの普通の文字列プロパティです。
標準の Word プロパティではない、アプリケーション固有のメタデータを追加するにはどうすればよいですか?
Document.CustomDocumentProperties.Add(name, value) をプロパティ名と値とともに使用してください。適切な Add のオーバーロードは、値の型に基づいて選択されます。
BuiltInDocumentProperties と CustomDocumentProperties の違いは何ですか?
BuiltInDocumentProperties は Word の固定された標準メタデータ フィールド(author、title、statistics など)のセットで、名前付きプロパティとしてアクセスできます。CustomDocumentProperties は、アプリケーション定義のメタデータ用の DocumentProperty 値のオープンエンドな名前付きコレクションで、インデクサー(例: properties[name])と Contains によって名前でアクセスします。
事前に正確な保存型が分からなくても、カスタム プロパティを読み取るにはどうすればよいですか?
コレクションをインデックス付けして DocumentProperty を取得し(例: properties[name])、その Type(PropertyType 値)を確認し、Value に対して ToInt()、ToDouble()、ToDateTime()、または ToBool() のような適切な型アクセサを使用します。
カスタム プロパティが文書の特定のコンテンツを追跡するようにするにはどうすればよいですか?
CustomDocumentProperties.AddLinkToContent(name, linkSource) を使用し、ブックマーク名を linkSource として渡します。これにより、プロパティの値は静的な値ではなく、そのブックマークされたコンテンツを反映します。
API Reference の概要
| クラス/メソッド | 説明 |
|---|---|
Document.BuiltInDocumentProperties | Word の標準メタデータ フィールド(author、title、statistics、security など) |
Document.CustomDocumentProperties | アプリケーション定義の名前付きメタデータ プロパティ |
CustomDocumentProperties.Add(name, value) | 名前と型付き値からカスタム プロパティを追加 |
CustomDocumentProperties.AddLinkToContent(name, linkSource) | ブックマークされたドキュメント コンテンツにリンクしたカスタム プロパティを追加 |
DocumentPropertyCollection | 両方のプロパティコレクションに共通する抽象基底 |
DocumentProperty | 単一プロパティの名前、型なし値、そして PropertyType |
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool() | プロパティの値に対する型付きアクセサ |
PropertyType | DocumentProperty の値タイプを記述する列挙型 |
DocumentSecurity | Enum は BuiltInDocumentProperties.Security を介してドキュメントの保護状態を記述します |