2016-05-24 3 views
0

私は読書枠用のフォーム領域を持っています。フォワードメールアイテムのワードディテクタを取り出して、ワードドキュメントに情報を追加します。これは、同じ機能で電子メールを作成して送信しないときに機能するようですが、電子メールを作成して編集して送信する場合、Email.Bodyは更新されません。私は電子メールを構成するためにフォーム領域で同様のコードを使用WordEditorの編集後にEmail.Bodyが更新されない

_email = this.OutlookItem as Outlook.MailItem; 
private void SendForwardEmail() 
{ 
    Outlook.MailIem fEmail = null; 
    Word.Document doc = null; 
    try 
    { 
     fEmail = ((Outlook._MailItem)_email).Forward(); 
     doc = GetWordEditor(fEmail); 
     EditDoc(doc); 
     var tmp = doc.Range().Text; 
     var tmp1 = fEmail.Body;  // tmp1 won't have what I added to tmp 
     ((Outlook._MailItem)fEmail).Send(); // This will send with the fEmail.Body value 
              // and won't show edits to the word doc 
    } 
    finally 
    { 
     Release(doc); 
     Release(fEmail); 
    } 
} 

、差がSendイベントがトリガされた時点で、Email.Bodyワードドキュメントの編集で更新されたことです。私はfEmail.Save()を試しましたが、うまくいかないようです。エディタという単語は、別の場所で単語エディタにアクセスすることができるため、編集内容を保存しますが、編集内容はそのまま残ります。 Email.Bodyは変更を反映していません。

編集:次のようにするとEmail.Bodyは更新されますが、ファンキーなソリューションのようです。

fEmail.Display(); 
((Outlook.MailItem)fEmail).Close(Outlook.OlInspectorClose.olSave); 

答えて

0

いつどこでコードを実行しますか?二次スレッドにありますか?

とにかく、基本的なCOMオブジェクトをすべて即座にリリースすることをお勧めします。 Outlook/Wordオブジェクトの使用を終了したら、System.Runtime.InteropServices.Marshal.ReleaseComObjectを使用してOutlook/Wordオブジェクトを解放します。次に、変数をVisual BasicのNothing(C#ではnull)に設定して、オブジェクトへの参照を解放します。詳細については、Systematically Releasing Objectsの記事をご覧ください。

+0

この関数は、フォーム領域のボタン押下イベント中に呼び出されます。セカンダリスレッドでは実行されていません。 – Natzely

関連する問題