2

Word ドキュメントでメモリストリームを読み込んでいます。メモリストリーム内の特定のテキストを変更して、検索や置換機能のように Word ドキュメントに保存できるようにしたいと考えています。Word Interop ライブラリを使用したくないので、誰か助けてください。ドキュメントを読み込んで保存するためのコードは既にあります。以下を参照してください。問題は、メモリ文字列を文字列に変換して文字列置換メソッドを使用すると、文字列を保存すると、Word 文書内のすべての書式が失われ、文書を開くと、あちこちに黒いボックスが表示されることです。

        private void ReplaceInFile(string filePath, string searchText, string replaceText)
    {
        byte[] inputFile = File.ReadAllBytes(filePath);
        MemoryStream memory = new MemoryStream(inputFile);

        byte[] data = memory.ToArray();

        string pathStr = Request.PhysicalApplicationPath + "\\Docs\\OutputDocument.doc";
        FileInfo wordFile = new FileInfo(pathStr);
        FileStream fileStream = wordFile.Open(FileMode.Create, FileAccess.Write, FileShare.None);

        fileStream.Write(data, 0, data.Length);

        fileStream.Close();

        memory.Close();
    }

インターネット上のサンプルコードからコードをコピーしました。そのため、方法がわからなかったので、メモリストリームが使用されました。私の問題は、私が働いている会社が相互運用という言葉を使用したくないということです。なぜなら、単語がコード化された機能の実行を妨げるポップアップダイアログボックスを時々表示できることがわかったからです。これが、差し込み印刷機能をプログラムで実現する方法を検討したい理由です。私は何年も前にここでやりたいことと非常によく似たことをしましたが、C# ではなく Delphi で、通常はコードを失いました。誰かがこれに光を当てることができれば、私は感謝します.

4

2 に答える 2

5

Word相互運用ライブラリを使用する必要があります-または少なくとも同様のものを使用する必要があります。Word文書が単なるプレーンテキスト文書ではなく、バイナリファイルです。バイトを文字列に変換し、その方法で置換を行うと、ドキュメントが完全に壊れます。

新しいオープンフォーマットを使用すると、それらを解析するための独自のコードを記述できる場合がありますが、ライブラリを使用するよりもはるかに困難になります。

于 2009-10-08T10:40:34.407 に答える
0

最善の策は、ファイルを OOXML に変換することです。これは、文字列の検索/置換、System.XML、または LINQ を使用してプログラムで更新できる XML ファイルです。

(サーバー側の変換プロセスの詳細については、http://blogs.msdn.com/b/ericwhite/archive/2008/09/19/bulk-convert-doc-to-docx.aspxを参照してください。)

于 2011-04-12T21:18:43.277 に答える