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