(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() します。
これで動かすと意図どおりに動き、エクセル貼り付け時にも文字化けしなくなりました。
これ解決するのに、数時間。やれやれです。