2017-11-04 284 views
0

這是我的情況。 我做了一個應用程序Windows窗體,它根據用戶在做什麼(按鈕/切換/文本框/等等)來編輯Excel工作表。如何將剪貼板中的圖像粘貼到Outlook電子郵件正文?

完成編輯後,會生成新的Excel文件。

我的程序然後選擇一個單元格範圍,並複製它。 它去剪貼板。

我已經做了多個測試(如果(){}其他{} /保存到一個.jpg /等),並且一切都被檢查爲真。

我不想附加我的圖片。 我不想保存它,即使是暫時的,然後通過保存的.jpg文件將其粘貼到主體中。 我「只是」想將Ctrl + V放入我的Outlook電子郵件正文中。

以下是我從我的剪貼板中獲取圖像(「消息體」在頂部作爲公共字符串聲明,這樣我可以把它通過不同的地區):

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電子郵件項目(顯示:真的)與圖片已經粘貼,然後只需點擊「發送」,它是好的。

我的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 

但我不知道爲什麼我會通過檢查(這我不知道的知識),如果我在獲取剪貼板中的圖像正在取得成功。

+0

我試圖用這個: '| newMail.Attachments.Add(@「E:\ C#\#項目XX \資源\ bitmap1.jpg,Outlook.OlAttachmentType.olEmbeddeditem,1, Type.Missing);' 和消息發送空的身體,用附加的文件,而它是在MSDN來源指定它把附着於機身頂部 我不明白這一點。 。 –

回答

0

我找到了一種方法,將附件從本地保存的文件添加到郵件中,並用HTML將其顯示到正文中。

像這樣:

newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; 

Outlook.Attachment attachment = newMail.Attachments.Add(@"path.imageformat", Outlook.OlAttachmentType.olEmbeddeditem, null, $"someTitle"); 

string imagecid = "whatever"; 

attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3613041E", imagecid); 

newMail.HTMLBody = String.Format("<body><img src=\"cid:{0}\"></body>", imageCid); 

的 「http://schemas.microsoft.com/mapi/proptag/0x3712001E」 代碼是在這裏:http://www.outlookcode.com/codedetail.aspx?id=1915

它的工作原理。

但是,我真的不喜歡在我的代碼中有urls,有沒有另一種方式?

而且,它看起來像我放入我的'imagecid'字符串中的任何東西都沒有改變。

我努力去理解我對代碼做了什麼,而不是讓它按原樣工作。

看起來我需要Office的某些授權來完成應用程序?特別是當我想將圖像粘貼到一個正文(可以包含其他內容而不僅僅是像素數據)時。

如果我不需要這個VB腳本的自動化,我想,這是因爲我不得不「在physicly/humanly」在Outlook按「發送郵件」按鈕?

還有其他的可能嗎?我仍然在使用一個文件粘貼在我的身體,我不能只編程一個Ctrl + C Ctrl + V? :(

相關問題