人気ブログランキング | 話題のタグを見る
(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() します。

これで動かすと意図どおりに動き、エクセル貼り付け時にも文字化けしなくなりました。
これ解決するのに、数時間。やれやれです。
by jehoshaphat | 2008-12-02 19:29 | .Net開発


<< (VB.Net)マウスカーソル... (VB.Net)DataObj... >>