EXCELに画像をドラッグする。

 .Netアプリケーションから、EXCELにも受け取れる形で画像をドラッグする際、通常は、DataObjectを作成し、SetImageメソッドで、Imageクラスを渡します。
 ところが、この方法だと、透過色が設定できるイメージ(GIFファイルなど)の透過色情報が抜け落ちます。
 いったんメタファイルに変換後貼り付けを行う手法もありますが、元のイメージとサイズが異なってしまうなどの不具合があります。

 そこで、HTML形式を使用して、透過情報を保持したままドラッグ開始する方法を紹介します。
 ただし、この方法を使うためには、イメージをファイルに保存しておく必要がありますので、ご注意ください。

        private void StartDrag(string fileName, Control parent)
        {
            DataObject data = new DataObject();

            string clipboardHeader = "Version:1.0\r\nStartHTML:{0:000000000}\r\nEndHTML:{1:000000000}\r\nStartFragment:{2:000000000}\r\nEndFragment:{3:000000000}\r\n";
            string htmlHeader = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\r\n<HTML><HEAD></HEAD><BODY><!--StartFragment-->";
            string imgBody = "<IMG src=\"file:///{0}\">";
            string htmlFooter = "<!--EndFragment--></BODY></HTML>";

            string imgFull = string.Format(imgBody, fileName.Replace(@"\", "/"));

            int startHtml = System.Text.Encoding.UTF8.GetByteCount(string.Format(clipboardHeader, 0, 0, 0 ,0));
            int endHtml = System.Text.Encoding.UTF8.GetByteCount(htmlHeader + imgFull + htmlFooter) + startHtml - 1;
            int startFragment = System.Text.Encoding.UTF8.GetByteCount(htmlHeader) + startHtml;
            int endFragment = System.Text.Encoding.UTF8.GetByteCount(imgFull) + startFragment - 1;

            string clipBoardHeaderFull = string.Format(clipboardHeader, startHtml, endHtml, startFragment, endFragment);

            string html = clipBoardHeaderFull + htmlHeader + imgFull + htmlFooter;

            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(html);
            data.SetData(DataFormats.Html, new MemoryStream(bytes));

            parent.DoDragDrop(data, DragDropEffects.Copy);
        }

HTML形式のクリップボードフォーマットを作成し、DataObjectに設定します。

コツとしては、クリップボード内データがUTF-8なので、UTF-8に変換してやり取りする必要がある点です。
そのため、Encodingクラスを使用して、UTF-8に変換したものをSetDataで渡しています。

data.SetDataの部分をClipboard.SetDataに置き換えれば、クリップボードへの貼り付けも同様に可能だと思います。

#なお、例外処理や、後処理が抜けていますのでご注意ください。

以下のページを参考にいたしました。
HTML Clipboard Format (Internet Explorer) | Microsoft Docs