我试图从VB中的Word 2007文档的文本生成Outlook 2007中的电子邮件正文。我可以访问Word和Outlook对象库,并且可以从Word文档读取字符串并将其写入Outlook,但我需要保持Word文档格式不变。.NET在Word中从Outlook生成电子邮件文本
其目的是允许用户编辑Word文档并始终让我的程序生成的电子邮件与文档同步。
有谁知道如何做到这一点?
我试图从VB中的Word 2007文档的文本生成Outlook 2007中的电子邮件正文。我可以访问Word和Outlook对象库,并且可以从Word文档读取字符串并将其写入Outlook,但我需要保持Word文档格式不变。.NET在Word中从Outlook生成电子邮件文本
其目的是允许用户编辑Word文档并始终让我的程序生成的电子邮件与文档同步。
有谁知道如何做到这一点?
我终于得到了这个令人满意的工作。它花了一些时间,所以我想我会分享我最终使用的。
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
下面是如何从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
伟大的东西,在这里四舍五入的代码片段,如果你看中是在发送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
-1。不是非常有效,因为你1)打开一个Word的实例,当你不需要时,2)你正在使用'WholeStory'而没有考虑它不会做什么[header/footers],3)你正在使用Windows剪贴板,从而清空已经存在的任何内容,而不用恢复它。 – 2010-06-24 19:19:40