3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(VB.Net)DataGridViewのショートカットキーでのコピー(Ctrl+C)をExcelに貼り付けると文字化けする

引き続き.NetのDataGridViewコントロールネタです。

 

DataGridViewで DataGridView.ClipboardCopyMode プロパティ を Disible 以外にするとなんと勝手にCtrl+Cでセルの値がタブ区切り形式でクリップボードにコピーされます。

 

お、これをそのままエクセルに貼り付けたら、楽勝じゃんと思ってましたが、やはり簡単にはいきませんでした。

問題は、2つ。前の記事であった、改行問題。そして、もう一つはエクセル貼り付け時に文字化けするという点です。

 

これはどうやらエクセル貼り付け時に Excelクリップボードの値を HTML Format として解釈しているためみたいです。(ここ参照。)

Excelで貼り付け時に テキスト 形式を選ぶようにすれば問題ないのですが、それはユーザには不親切ということではやりプログラム内での解決法を模索。

それで探しているとDataGridViewの内容をExcelに貼り付けるにて、Ctrl+CのKeyUpイベントで強制的にクリップボードにテキスト入れると方法が載っていました。

それで、試してみましたが、結果はダメ。。

なんか、.Net内部のCtrl+C処理と自身がKeyUPで記述した処理の順番がキーアップのタイミングにより異なっているみたいです。

 

で、さらにいろいろ模索。

ふと思いついたのはコンテキストメニュー(右クリック)です。

たしか、こにショートカットキーを登録できたはずだ!ということで、こちらを参考に、Ctrl+Cのショートカットキーを持つコンテキストメニューを作りました。

 

そのメニューを押下すると前の記事で作った、GetClipboard()を実行させるようにします。そのGetClipboard()で帰ってきた値を Clipboard.SetDataObject() します。

 

これで動かすと意図どおりに動き、エクセル貼り付け時にも文字化けしなくなりました。

これ解決するのに、数時間。やれやれです。