2017-11-04 15 views
0

ここは私の状況です。 私は、ユーザーが何をしているのか(ボタン/トグル/テキストボックス/など)に応じてExcelシートを編集しているApplication Windows Formを作成しました。クリップボードからOutlookのメール本体に画像を貼り付けるには?

編集が完了すると、新しいExcelファイルが生成されます。

これで、プログラマはある範囲のセルを選択してコピーします。 クリップボードに移動します。

私は複数のテストを行いました(if(){} else {}/.jpg/etcに保存しています)、すべてが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 eMailアイテム(表示:true)を開き、「送信」をクリックするだけでOKだった。

My 2.0バージョンは、[Send/Generated Excel Sheet //]ボタンをクリックするだけで自動化されます。

はここで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

これは機能します。

しかし、実際には自分のコードにURLがあるのが好きではありません。別の方法がありますか?

また、私は 'imagecid'文字列に何も変えないように見えます。

私はコードで何をしたのかを理解するのは難しいです。

私は、アプリケーションから仕事をするために、オフィスから何らかの承認が必要なようですか?特に、私はボディに画像を貼り付けたいとき(ちょうどピクセルデータ以外のものを含むことができます)。

VBスクリプトでこの自動化が必要ない場合は、Outlookの[メール送信]ボタンを「物理的に/人間的に」押していなければならないと思いますか?

他の方法はありますか?私はまだ私の体にペーストするためにファイルを使用しています、私はCtrl + C Ctrl + Vをプログラムで作ることはできませんか? :(

関連する問題