2010-06-07 88 views
2

我试图从VB中的Word 2007文档的文本生成Outlook 2007中的电子邮件正文。我可以访问Word和Outlook对象库,并且可以从Word文档读取字符串并将其写入Outlook,但我需要保持Word文档格式不变。.NET在Word中从Outlook生成电子邮件文本

其目的是允许用户编辑Word文档并始终让我的程序生成的电子邮件与文档同步。

有谁知道如何做到这一点?

回答

1

我终于得到了这个令人满意的工作。它花了一些时间,所以我想我会分享我最终使用的。

Private Sub CreateEmail() 
    Dim wordApp As Word.ApplicationClass = New Word.ApplicationClass() 

    Dim file As Object = "PATH TO WORD DOCUMENT" 

    Dim nullobj As Object = System.Reflection.Missing.Value 

    Dim doc As Word.Document = wordApp.Documents.Open(_ 
       file, nullobj, nullobj, nullobj, nullobj, nullobj, _ 
       nullobj, nullobj, nullobj, nullobj, nullobj, nullobj) 
    doc.ActiveWindow.Selection.WholeStory() 
    doc.ActiveWindow.Selection.Copy() 
    Dim data As IDataObject = Clipboard.GetDataObject 
    body = data.GetData(DataFormats.Html, True).ToString 
    Dim delimiter As Char() = "<".ToCharArray() 
    body = "<" + (body.Split(delimiter, 3))(2) 
    doc.Close() 
    My.Computer.Clipboard.SetText(body) 
    SendMail() 
End Sub 

Private Sub DisplayMail() 
    Dim Errmsg As String 

    Try 
     If Len(mailto) = 0 Then 
      Errmsg = "You must designate a recipient." 
      MsgBox(Errmsg, MsgBoxStyle.Exclamation, "Error") 
      Exit Sub 
     End If 

     If GetOutlook() = True Then 
      'Set the properties of the mail item 
      mItem = CType(mOutlookApp.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem) 
      mItem.Recipients.Add(mailto) 
      mItem.BCC = bcc 
      mItem.Subject = Me.subject 
      mItem.HTMLBody = body 

      'Save email to Outlook draft folder of the user 
      mItem.Display() 
     End If 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
End Sub 
+0

-1。不是非常有效,因为你1)打开一个Word的实例,当你不需要时,2)你正在使用'WholeStory'而没有考虑它不会做什么[header/footers],3)你正在使用Windows剪贴板,从而清空已经存在的任何内容,而不用恢复它。 – 2010-06-24 19:19:40

0

下面是如何从Outlook VBA(添加对Word OM的引用)完成此操作的示例。你可以使用它来移植到.NET。

Sub CreateMail() 
    Dim filePath As String 
    filePath = """C:\\Users\\Me\\Desktop\\test.docx""" 
    InsertBodyTextInOutlookWordEditor filePath 
End Sub 

Sub InsertBodyTextInOutlookWordEditor(filePath As String) 
    Dim myMail As Outlook.MailItem 
    Dim myInspector As Outlook.Inspector 
    Dim wdDoc As Word.Document 
    Dim wdRange As Word.Range 

    On Error Resume Next 
    Set myMail = Application.CreateItem(olMailItem) 
    myMail.Subject = "Here's the latest..." 
    myMail.Display 
    Set myInspector = myMail.GetInspector 
    Set wdDoc = myInspector.WordEditor 
    If Not (wdDoc Is Nothing) Then 
     Set wdRange = wdDoc.Range(0, wdDoc.Characters.Count) 
     wdRange.Fields.Add Range:=wdRange, Type:=wdFieldEmpty, Text:= _ 
     "INCLUDETEXT " & filePath, _ 
     PreserveFormatting:=True 
    End If 
End Sub 
1

伟大的东西,在这里四舍五入的代码片段,如果你看中是在发送Word文档作为从简单的VBScript附件...

Dim outlook, nameSpace, mailItem 

Set outlook = WScript.CreateObject("Outlook.Application") 
Set nameSpace = outlook.GetNameSpace("MAPI") 
Set mailItem = outlook.CreateItem(0) 

mailItem.Recipients.Add "[email protected]" 
mailItem.Subject = "Mail Subject" 
mailItem.Body = "The body of the mail item" & vbcrlf & _ 
     "Put whatever you want in here!" 

mailItem.Attachments.Add("\\FULLUNC\PATH\TO Your File\Called\Whatever.doc").DisplayName = "Attached File" 

mailItem.Send 

nameSpace.Logoff 
相关问题