.NET でドキュメントを操作する方法
このガイドでは、.NET 用の Aspose.Words FOSS における Document オブジェクトモデルの操作方法を示します。空のドキュメントの作成、既存ドキュメントの安全な読み込み、セクション/本文構造の走査、ドキュメントの結合、編集制限の適用についてです。.NET 用の Aspose.Words FOSS は、NuGet から入手できるか、ソースからビルドすることで利用可能です。
ステップバイステップ ガイド
ステップ 1: ライブラリを取得する
リポジトリをクローンしてビルドする Aspose.Words.sln Release 構成でビルドし、次にプロジェクト参照を追加します Aspose.Words.csproj .NET プロジェクトからです。完全なクローンとビルドコマンドは インストール ガイド。参照が完了したら、次を追加します using Aspose.Words; ドキュメントを扱う任意のファイルの先頭に追加します.
ステップ 2: ドキュメントを作成または読み込む
空のドキュメントを作成するには new Document() を呼び出し、既存のドキュメントを開くにはファイルパスまたは Stream を Document(fileName) / Document(stream) コンストラクタに渡します。LoadOptions 引数を受け取るオーバーロードを使用すれば、暗号化ファイルのパスワードを指定できます。形式が信頼できないファイルを読み込む前に、FileFormatUtil.DetectFileFormat(fileName) を呼び出してください。これにより、検出された LoadFormat と、ファイルが IsEncrypted、HasDigitalSignature、または HasMacros かどうかを報告する FileFormatInfo が返されます。これにより、Document が解析を試みる前に予期しない入力を拒否できます。
ステップ 3: DocumentBuilder でコンテンツを作成する
DocumentBuilder は Document をラップし、ツリー上を移動しながらコンテンツを挿入できるカーソルを提供します。Write(text) と Writeln(text) はカーソル位置にテキストを挿入し、InsertParagraph() は新しい段落を開始します。ビルダーの Font、ParagraphFormat、ListFormat、PageSetup プロパティに設定された書式は、次に書くものすべてに適用されます。カーソルは MoveToDocumentStart()、MoveToDocumentEnd()、MoveToSection(sectionIndex)、MoveToBookmark(bookmarkName)、または MoveToParagraph(paragraphIndex, characterIndex) で再配置でき、CurrentNode / CurrentParagraph / CurrentSection を読み取ってビルダーの位置を確認してください。
ステップ 4: セクションと本文の構造を検査する
Document は SectionCollection を Document.Sections を通じて公開します(FirstSection / LastSection も含む)。各 Section は正確に一つの Body を持ち、その主要コンテンツは Body.Paragraphs(ParagraphCollection)および Body.Tables から取得できます。ノードを手動でたどらずにテキストを読み取ったり検索したりするには、Document、Section、Paragraph などのノードで利用できる Range を使用します — Range.Text はプレーンテキストを返し、Range.Replace(pattern, replacement) はその範囲だけに限定した検索置換を実行します。
ステップ 5: 2つのドキュメントを結合する
全ドキュメントをコピーするには、Document.Clone() を呼び出します。ある Document インスタンスから別のインスタンスへ特定のコンテンツを持ち込むには、宛先ドキュメントで ImportNode(srcNode, isImportChildren) を呼び出すか、Document.AppendDocument(srcDoc, importFormatMode) を呼び出してソースドキュメントのすべてのセクションを現在のドキュメントの末尾に追加します。DocumentBuilder.InsertDocument(srcDoc, importFormatMode) は同様の操作を行いますが、末尾ではなくビルダーのカーソル位置に挿入します。3 つの場合すべてで、ImportFormatMode の値(KeepSourceFormatting、UseDestinationStyles、または KeepDifferentStyles)を意図的に選択してください。これは、衝突した際にどちらのドキュメントのスタイルが優先されるかを決定します。
ステップ 6: 編集制限を適用する
Document.Protect(type, password) を ProtectionType 値(ReadOnly、AllowOnlyComments、AllowOnlyRevisions、または AllowOnlyFormFields)とともに呼び出すと、Word がドキュメントに対して受け入れる編集を制限できます。Unprotect() は(パスワードの有無にかかわらず)制限を解除します。これは Word 内での編集にのみ影響し、保存されたファイルを暗号化するわけではありません。ファイルを開く際にパスワードが必要になるようにするには、保存時に OoxmlSaveOptions.Password を設定してください。
一般的な問題と対策
Document(fileName) Word で問題なく開くファイルに対して例外がスローされます. このエディションのローダーがサポートしている形式ではありません。呼び出してください FileFormatUtil.DetectFileFormat(fileName) 最初に実行し、返されたものを確認してください LoadFormat ロードを試みる前に。
文書間でコピーしたコンテンツが誤ったフォントやスタイルを取得します。 その ImportFormatMode 渡された AppendDocument or InsertDocument 期待したものと一致しません。渡す KeepSourceFormatting or UseDestinationStyles デフォルトに依存せず、明示的に指定してください。
Unprotect() 効果がないようです。 ドキュメントがパスワードで保護されていない場合(呼び出し Unprotect() (引数なしで呼び出された場合)、または提供されたパスワードが一致しない場合 Protect() 呼び出されたものと一致しません。
次を介して適用された書式設定 DocumentBuilder 期待した場所に表示されません。 ビルダー レベルの書式設定 (Font, ParagraphFormat) は、書き込まれたコンテンツにのみ適用されます after それが設定されています。カーソルを移動し、呼び出す前に書式設定を設定してください Write/Writeln, 後ではありません。
よくある質問
新しい空の Word ドキュメントはどうやって作成しますか?
new Document() を呼び出します。すぐにコンテンツの挿入を開始できるように、DocumentBuilder でラップしてください。
Document.Clone() と ImportNode の違いは何ですか?
Clone() は文書全体を新しい Document インスタンスにコピーします。ImportNode(srcNode, isImportChildren) は単一のノード(必要に応じてその子ノードも)をある文書のツリーから別の文書へ持ち込みます。これは、文書全体ではなく特定のコンテンツを組み合わせる際に使用します。
ファイルをロードする前に、安全にフォーマットを確認するにはどうすればよいですか?
FileFormatUtil.DetectFileFormat(fileName)(または Stream オーバーロード)を呼び出し、返された FileFormatInfo の LoadFormat、IsEncrypted、HasDigitalSignature、および HasMacros プロパティを確認してから、ファイルを Document に渡してください。
文書の本文内の段落だけを読むにはどうすればよいですか?
セクションの Body 上の Body.Paragraphs コレクションを使用するか、他のノードタイプの場合は Body.GetChildNodes(nodeType, isDeep) を使用してください。
Document.Protect は保存されたファイルを暗号化しますか?
いいえ — それはファイルが開かれたときに Word が適用する編集制限です。ファイル自体を開く際にパスワードを要求するには、Document.Save を呼び出すときに OoxmlSaveOptions.Password を設定してください。