在 Outlook 电子邮件回复中包含原始文本和格式
Posted
技术标签:
【中文标题】在 Outlook 电子邮件回复中包含原始文本和格式【英文标题】:Include the original text and formatting in Outlook email response 【发布时间】:2021-01-07 10:29:49 【问题描述】:我有 Excel 代码来生成对所选电子邮件的响应。响应包括动态文本,基于 Excel 中完成的处理。
我希望回复包含原始电子邮件文本。我尝试了一些东西,但都没有保留原始电子邮件格式,使其看起来失真,例如表格正在分解。
Sub Send_Email()
Dim emailApplication As Object
Dim emailItem As Object
Set emailApplication = CreateObject("Outlook.Application")
Set emailItem = emailApplication.ActiveExplorer.Selection.Item(1).ReplyAll
emailItem.SentOnBehalfOfName = "dummy@dummy.com"
emailItem.Body = Sheets("Email").Range("A34")
emailItem.Display
Set emailItem = Nothing
Set emailApplication = Nothing
End Sub
【问题讨论】:
查看datanumen.com/blogs/… 阅读.htmlBody
而不是.Body
- 根据您的需要,有多种方法可以做到这一点。将 Body 视为纯文本,而 HTMLBody 允许 HTML 标记涵盖您需要的格式类型。很多例子和类似的问题。如果您遇到困难,我建议您尝试一下,然后再提出另一个问题。
Paste Excel range in Outlook的可能重复
【参考方案1】:
试试这个
With emailItem.ReplyAll
.HTMLBody = "<p>" & Sheets("Email").Range("A34").Value & "</p><br>" & .HTMLBody
.Display
End With
如果Sheets("Email").Range("A34").Value
具有您需要保留的格式,那么您还必须使用RangetoHTML(rng) 将其转换为html 文本。我在下面添加了相关代码,以防链接失效。
Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2016
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.readall
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function
【讨论】:
有一个错误,其中 emailItem.ReplyAll 应该只是 emailItem。尽管如此,这还是一种享受。通过在 Excel 中就地编辑,我能够将范围内的文本转换为 HTML 格式。我实际上是使用 CHAR(10) 来换行,所以我只是根据需要用 或替换它,现在一切正常。
以上是关于在 Outlook 电子邮件回复中包含原始文本和格式的主要内容,如果未能解决你的问题,请参考以下文章
使用 emacs 和 gnus 在引用的回复中包含原始消息的日期和时间