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

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(VB.Net)DataGridViewで現在選択されているセルの値を簡単にタブ区切りやCSV文字列にする方法

DataGridViewの値をCSVにしたり、コピペできるようにしてエクセルで扱いたいということは多いと思います。
DataGridViewにはそれらのデータ転送を簡単にできる方法があります(が、中途半端です)

さて、DataGridViewで選択されたセルの値を取得するために、下記のプロパティを変更しないといけません。
DataGridView.ClipboardCopyMode プロパティ (このプロパティの詳細はMSDN参照)
このプロパティに Disble 以外のDataGridViewClipboardCopyMode列挙型の値を入れます。
(DataGridViewClipboardCopyModeについてはMSDN参照。

後は下記のように、DataGridView.GetClipboardContent()メソッドでセル値取得します。このとき,GetClipboardContent()は DataObject クラスで返すので、DataObject.GetText()メソッドで文字列化します。このときの引数により、フォーマットを指定できます。

'グリッドの選択範囲の値を取得(DataGridViewは変数"grd"とする)
Dim returnValue As DataObject
returnValue = grd.GetClipboardContent()
'タブ区切り形式で取得
Dim strTab = returnValue.GetText()

'CSV形式で取得
Dim strCsv = returnValue.GetText(TextDataFormat.CommaSeparatedValu)



たったこれだけで、フォーマット化されたセルの値の文字列が取得できるわけです。
この文字列をクリップボードに入れるには

'取得したタブ区切り形式文字列をクリップボードにセット
Clipboard.SetDataObject(strTab , True)
'取得したタブCSV文字列をクリップボードにセット
Clipboard.SetDataObject(strCsv , True)


とすることでできます。

さて、本当にこれだけですべてが万事順調にいけばよかったのですが、そうは問屋がおろしません。

DataObject.GetText()メソッドでCSVにするを指定したときに処理に問題があったのです。
詳しくは続きの記事に書きます。