2010-12-18 19 views
1

このタスクは、.NETを使用してWord文書の特定のキーワードを置き換えることです。元の書式と文書構造を保持するための最も高速で信頼性の高い方法は何でしょうか?Word文書のテキストをプログラムで置換する最速の方法

+0

.NETである必要がありますか? Wordはこれを行うフル機能のマクロ言語(Visual Basic for Applications)を手に入れました。 VBAでマクロを記録することもできます。これをメールの機能と組み合わせて、仕事を完了させてください。実際に.NETを使用する必要がある場合は、VBAを.NETおよびOLEオートメーションに手作業で簡単に変換できます。または、実際にWordをインストールしないでこれを行う必要がありますか?ああ。 「最速」とは何ですか?最も速く実装するには? 1つのドキュメントで最高のパフォーマンスを発揮しますか?複数のドキュメントで最高のパフォーマンスを発揮しますか? –

答えて

3

あなたは単語がインストールされている場合、それはかなり簡単です。

GACからWord docアセンブリを参照します。単語文書を読み込んで、その中のデータを置き換えることができます。

これは私がここにクライアント名などを入れてワード文書を印刷するアプリからのものです。 (切り取って貼り付けたセクション)

public void ReplaceWordDoc(ref Document doc, object data) 
    { 
     object missing = Missing.Value; 

     List<ReplacerSearch> search = GetSearchList(data); 

     foreach (var searchItem in search) 
     { 
      foreach (Range tmpRange in ((Document)doc).StoryRanges) 
      { 
       // Set the text to find and replace 
       tmpRange.Find.Text = searchItem.Find; 
       tmpRange.Find.Replacement.Text = searchItem.Replace; 

       // Set the Find.Wrap property to continue (so it doesn't 
       // prompt the user or stop when it hits the end of 
       // the section) 
       tmpRange.Find.Wrap = WdFindWrap.wdFindContinue; 

       // Declare an object to pass as a parameter that sets 
       // the Replace parameter to the "wdReplaceAll" enum 
       object replaceAll = WdReplace.wdReplaceAll; 

       // Execute the Find and Replace -- notice that the 
       // 11th parameter is the "replaceAll" enum object 
       tmpRange.Find.Execute(ref missing, ref missing, ref missing, 
        ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing, ref missing, ref replaceAll, 
        ref missing, ref missing, ref missing, ref missing); 
      } 
     } 
    } 

^この部分は検索/置換します。 ReplacerSearch(ワウ・バッド・ネーム)のリストは、Find、Replaceの2つのプロパティです。 Findは検索するテキスト、Replaceは置き換えるテキストです。

次に、指定されたファイル名(パス/名前)に基づいて、wordのインスタンスを作成してドキュメントを開き、置き換えを行い、次に保存または印刷することができます。

object fileName  = string.Empty, 
      trueValue  = true, 
      missing   = Missing.Value, 
      falseValue  = false; 
    var  app    = new ApplicationClass(); 
    var doc = new Document(); 

try 
{ 
    doc = app.Documents.AddOld(ref fileName, ref missing); 
    //doc = app.Documents.Add(ref fileName, ref missing, ref missing, ref missing); 

    // Loops through the StoryRanges (sections of the Word doc) 
    ReplaceWordDoc(ref doc, item); 

    //Save or print... 
} 
catch (Exception ex) 
{ 
    Helpers.Logger.WriteToEventLog(ex.Message, EventLogEntryType.Error); 
} 
finally 
{ 
    if (doc != null) 
    { 
     doc.Close(ref falseValue, ref missing, ref missing); 
    } 
} 

if (app != null) 
{ 
    app.Application.Quit(ref falseValue, ref missing, ref missing); 
} 

希望します。

+0

それは仕事をして、合理的に速く働きます。 – SharpAffair

1

新しいWordファイルは基本的にXMLドキュメントです。 Pythonなどの言語で通常のファイルとして開くことができますし、置き換えたい用語を検索することができます。一度見つけたら、ファイルを変更して保存するだけです。

おそらくXML文書に合わせた簡単な方法があるかもしれませんが、これはおそらく文字列ライブラリで行うことができます。

編集:.NETでこれを行うには、同じ方法論が機能するはずです。今すぐタグに気付いただけです。

+0

保存するデフォルトのフォーマットはまだバイナリです。 –

+1

OpenXML SDKはおそらくそうです。それはネットで、使い方が簡単です。問題は「見つかる単語」が最初の単語BOLDと残りの正規の単語で一貫して書式設定されていないと「単語」が単一の文字列として表示されないということですxmlは、RUNオブジェクトに分割されます。これは、xmlを適切に解析するために必要なすべてのものです。これは小さな仕事ではありません。 .netを使用して検索と置換を自動化するのが最も速く、合理的なパフォーマンスが必要です。 WordのFIND REPLACEは大したものではありませんが、確かにOKです。 – DarinH

関連する問題