2012-02-16 6 views
0

/FirstName/, /LastName/などのプレースホルダを含むMS Word 2003文書があります。Microsoft Office 12 Libraryを使用してファイルを読み取り、ワイルドカードで検索します。Find.Text = "/[A-Z]*/"。正常に動作し、Find.Executeはプレースホルダーを正確に見つけます。しかし、それはブール値だけを返すので、プレースホルダ自体を取得する方法はわかりません。Office Wordライブラリ - ワイルドカードで検索した結果

あなたはテキストがユーザーに表示されていないので、私は、単語のブックマーク代わりにプレースホルダを使用することをお勧めして、あなたが何かを使用することができ、ワイルドカードオプション

+0

問題の方法に関する情報を提供してください。使用しているコードも提供してください。 –

+0

あなたのコードを表示するとHoangを助ける – MethodMan

+0

ありがとう、私は –

答えて

1

で検索されたテキストを取得する方法を私に示してくださいすることができ特定のブックマークの範囲を取得できるので、任意の場所にテキストを自動的に挿入することができます。

protected void insertTextAt(string bookmarkName, string text, 
      bool useDefaults = true, string fontName = "Arial", 
      int fontSize = 11, int bold = 0,bool newLine = true) 
     { 
      try 
      { 
       Object oBookMarkName = bookmarkName; 
       WordInterop.Range wRng = 
        this.wDoc.Bookmarks.get_Item(ref oBookMarkName).Range; 
       wRng.Text = text; 
       if (!useDefaults) 
       { 
        wRng.Font.Bold = bold; 
        wRng.Font.Name = fontName; 
        wRng.Font.Size = fontSize; 
       } 
       if (newLine) 
       { 
        wRng.Text += "\r\n"; 
       } 
       wRng.Font.Bold = 0; 
      } 
      catch (Exception e) 
      { 
       String exceptionString = String.Format("Bookmark {0} could not" 
       +" be found in template {1}",bookmarkName,this.template); 
       throw new Exception(exceptionString,e); 
      } 

     } 
+0

以下のコードを投稿した私は既存のプログラムとドキュメントを共有します。プレースホルダをブックマークに変更した場合、古いプログラムが正しく機能しなくなる可能性があります。 Btwありがとう –

+0

プレースホルダーをブックマークに変更する必要はありません。プレースホルダー全体をブックマークとしてマークするだけで、テキストは自動的にオーバーライドされます。この方法で下位互換性が得られます。プレースホルダだけを使用することを主張するならば、この 'Application.Selection.Find.Replacement.Text =" Found ";"とこれを試してください。http://msdn.microsoft.com/en-us/library/f65x8z3d(v=vs。 80).aspx – trebor

0

ここは自分の興味のあるコードです。 はまず、これはletter.docファイルです

親愛なる/姓//MiddleName//姓/:

は、私たちのプログラムへようこそ。私たちは、私はまた、各プレースホルダのキー/値

... 
    "/FirstName/" : "read from database" 
    "/MiddleName/" : "read from database" 
    "/LastName/" : "read from database" 
    ... 

を保存Dictionary<string, string> Dataを持っており、私はその方法を持っている....

あなたの顧客サービスの最高 品質を与えることにコミットしています.docファイルを読み込んで、プレースホルダを置き換えます。

oWordApp = new MSWord.ApplicationClass(); 
    doc = oWordApp.Documents.Open(ref fileName, 
                ref missing, ref readOnly, 
                ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref isVisible, 
                ref missing, ref missing, ref missing); 
    doc.Activate(); 
    doc.Select(); 

    oWordApp.Selection.Find.ClearFormatting(); 
    oWordApp.Selection.Find.MatchWildcards = true; 
    oWordApp.Selection.Find.Wrap = MSWord.WdFindWrap.wdFindContinue; 
    oWordApp.Selection.Find.Text = "/[A-Z]*/"; 

    bool isFound = true; 
    while(isFound == true) { 
     isFound = oWordApp.Selection.Find.Execute(ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, ref missing); 

     if(isFound == true) { 
      //use the database to do the replacing 
      //how to get the placeholder itself, such as "/FirstName/", "/LastName/",... 
     } 
    } 
関連する問題