我可以使用以下代码将Outlook电子邮件粘贴到网页中。
VBA
Sub HTMLClipboard()
Dim M As MailItem, Buf As MSForms.DataObject
Set M = ActiveExplorer().Selection.Item(1)
Set Buf = New MSForms.DataObject
Buf.SetText M.HTMLBody
Buf.PutInClipboard
End Sub
HTML
<div id="Data"></div>
<textarea id="TA"></textarea>
的jQuery
$(document).on('paste', function(e) {
$('#TA').focus();
setTimeout(function() {
$('#Data')
.html($('#TA').val());
});
});
除非 HTMLBody中有图像,否则非常有效。在那种情况下,我得到一个像这样的破碎图像src:
<img width=596 height=381
id="Picture_x0020_1"
src="cid:image001.png@01D07855.C2524830"
>
有没有办法在VBA函数中编码图像数据,最好是作为数据URI?
答案 0 :(得分:1)
SRC =&#34; CID:image001.png@01D07855.C2524830"
此类源字符串表示隐藏的附件,其PR_ATTACH_CONTENT_ID(DASL名称 - &#34; http://schemas.microsoft.com/mapi/proptag/0x3712001E&#34;)属性设置为image001.png@01D07855.C2524830值。您可以使用Outlook项目的Attachments属性查找图像。
有关详细信息,请参阅How to add an embedded image to an HTML message in Outlook 2010。
答案 1 :(得分:0)
想出了一个解决方案,感谢Eugene将我指向了Attachments系列。 (我不知道它包含嵌入的图像。)
Sub HTMLClipboard()
Dim M As MailItem, Buf As MSForms.DataObject
Set M = ActiveExplorer().Selection.Item(1)
Set Buf = New MSForms.DataObject
b = M.HTMLBody
Dim i As Integer
For i = 1 To M.Attachments.Count
fn = M.Attachments.Item(i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E")
If fn > "" Then
M.Attachments.Item(i).SaveAsFile "d:\temp"
base64 = EncodeFile("d:\temp")
b = Replace(b, "cid:" & fn, "data:image/png;base64," & base64)
End If
Next
Buf.SetText b
Buf.PutInClipboard
End Sub
此代码:
EncodeFile
函数将图像二进制数据转换为base64:https://stackoverflow.com/a/8134022/3903374 src
属性,该编码将其转换为数据URI。我对避免创建临时文件的方法感兴趣。
我现在可以在Outlook中运行宏并粘贴到我的网页上,图像数据嵌入在HTML本身中。