【发布时间】:2017-11-04 07:03:30
【问题描述】:
这是我的情况。 我制作了一个应用程序 Windows 表单,它根据用户的操作(按钮/切换/文本框/等)编辑 Excel 工作表。
一旦编辑完成,就会生成新的 Excel 文件。
然后我的程序会选择一系列单元格并复制它。 它进入剪贴板。
我已经进行了多次测试(if(){}else{} / 保存到 .jpg / 等),并且所有内容都检查为 true。
我不想附加我的图像。 我不想保存它,即使是暂时的,然后通过保存的 .jpg 文件将其粘贴到正文中。 我“只是”想在我的 Outlook 电子邮件正文中添加一个 Ctrl+V。
这是我从剪贴板获取图像的方法(“MessageBody”在顶部声明为公共字符串,以便我可以通过不同区域调用它):
public void ReadData()
{
Excel excel = new Excel(@"E:\c#\Project#XX\Resources\TEST.xlsx", 1);
excel.CopyRange(0, 0, 32, 12);
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Bitmap))
{
Bitmap MessageBody = (iData.GetData(DataFormats.Bitmap, true) as Bitmap);
//pbx.Image = Image;
//image.Save(@"E:\c#\Project#XX\Resources\bitmap1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
//MessageBody = image;
}
excel.Close();
excel.Quit();
}
这是我的消息构建代码:
private void flatCustButton013_Click(object sender, EventArgs e)
{
ReadData();
string MessageSubject = $"SomeSubject";
Outlook.MailItem newMail = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem);
newMail.Subject = MessageSubject;
newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
MessageHTMLBody = "<html><body>SomeText.<img src="cid:MessageBody"</img></body></html>";
newMail.HTMLBody = MessageHTMLBody;
//newMail.Body = System.Windows.Input.ApplicationCommands.Paste;
//newMail.Display(false);
//newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; ;
//newMail.HTMLBody = System.Windows.Input.ApplicationCommands.Paste;
//newMail.Body = MessageBody;
newMail.To = ToAddress;
newMail.SentOnBehalfOfName = FromAddress;
newMail.CC = CcAddress;
newMail.BCC = BccAddress;
//System.Windows.Input.ApplicationCommands.Paste;
//wrdEdit = application._Inspector.WordEditor
newMail.Send();
}
在以前的版本中,人们必须打开 Excel 文件,手动更改单元格,然后单击按钮(在 VB 中使用宏)。 它会打开一个已粘贴图像的 Outlook 电子邮件项目(显示:true),然后只需单击“发送”就可以了。
我的 2.0 版本旨在通过单击“发送//生成的 Excel 表//”按钮来自动执行此操作。
这是 VB 中的宏代码:
Sub SendMail()
Dim Messager As New Outlook.Application
Dim Mail As Outlook.MailItem
Dim WrdEdit
Range("my_range").CopyPicture
Set Messager = New Outlook.Application
Set Mail = Messager.CreateItem(olMailItem)
With Mail
.To = "some folks"
.CC = "some folks"
'.BCC = ""
.Subject = "SomeSubject"
.Display
.HTMLBody = Mess + .HTMLBody
End With
Set WrdEdit = Messager.ActiveInspector.WordEditor
WrdEdit.Application.Selection.Paste
Set WrdEdit = Nothing
Set Messager = Nothing
Set Mail = Nothing
ActiveWorkbook.Close SaveChanges:=False
End Sub
但我不明白如果我成功检索到剪贴板图像,为什么我会通过检查器(我对此一无所知)。
【问题讨论】:
-
我试过用这个:
|newMail.Attachments.Add(@"E:\c#\Project#XX\Resources\bitmap1.jpg, Outlook.OlAttachmentType.olEmbeddeditem, 1, Type.Missing);并且消息是空的,带有一个附件,而在 MSDN 源中指定它将附件放在正文的顶部.我不明白。