2016-08-27 12 views
0

私は、差し込み印刷フィールドを含む複数のテキストボックスを使用する単語文書を持っています。C#でMicrosoft Wordテキストボックスにマージするメール

私は、ドキュメント内の任意の差し込み印刷フィールドを検索し、適切な値を差し込み印刷フィールドに挿入して文書を保存するシステムを使用して、プログラムによって単語文書に差し込み印刷したい新しいファイルとして。

Document.StoryRanges 

を使用することにより

私は1つのテキストボックスの上記のプロセスを行うことができると思います。

しかし、複数のテキストボックスを作成すると、その値をテキストボックスの1つに一貫して挿入するようにしか見えません。値を受け取るtexboxは変更されません。そのテキストボックスを削除しようとすると、メールマージ処理が機能しないため、他のテキストボックスを操作して動作させる必要があります。たとえば、テキストボックスを後方に持ってきて、システムがテキストボックスのみに差し込み印刷するように転送する必要があります。

私は各テキストボックスに入るためにforeachループを作成しようとしましたが、大した成功はありませんでした。だから私はいくつかのデバッグを行い、システムがドキュメント全体とテキストボックスの1つだけをStoryRangesとして読み込んでいることがわかりました。

答えて

1

これは私が最近使った解決策です。差し込み印刷フィールドには、Document.Shapesを使用できます。私はここで何が起こっているのかよくわからないが、それは私のために働いた。

public static List<Field> getMailMergeFields(Document document) 
{ 
    List<Field> mailMergeFields = new List<Field>(); 
    foreach (Shape shape in document.Shapes) 
    { 
     if (shape.TextFrame.HasText != 0) 
     { 
      foreach (Field field in shape.TextFrame.ContainingRange.Fields) 
      { 
       if (isMailMergeField(field)) mailMergeFields.Add(field); 
      } 
     } 
    } 
    foreach (Field field in document.Fields) 
    { 
     if (isMailMergeField(field)) mailMergeFields.Add(field); 
    } 
    return mailMergeFields; 
} 

public static bool isMailMergeField(Field field) 
{ 
    string fullField = field.Code.Text.Trim(); 
    if (!fullField.StartsWith("MERGEFIELD")) return false; 
    if (!fullField.EndsWith(@"\* MERGEFORMAT")) return false; 
    return true; 
} 

これが役に立ちます。

関連する問題