DataGridViewにテキストを表示させているとき、Ctrl-C,VでデータをExcelへコピー&ペーストさせたい場合があります。
通常であれば特にプログラムを書かなくてもコピペは可能なのですが、コピー元となるDataGridViewのセル値に改行が含まれる場合は上手くいきません。
例えば、以下のようなデータがあった場合、Excelへコピペをすると…
Excel上では、下記のようにコピー元にあった改行文字の単位で別のセルに値が入ってしまいます。
このような場合は、下記の対処方法をとると解決できます。
※余談ですが、DataGridViewのセル内で改行を許可するには、下記のようにWrapModeプロパティを変更すればOKです
dataGridView1.Columns[0].DefaultCellStyle.WrapMode = DataGridViewTriState.True; |
対処方法
対処方法ですが、Excelでは改行を含むデータをセルに含めたい場合は「”」で括ればOKです。試しに、下記の文字列をコピーして、Excelに貼り付けてみると、期待する結果になることがわかります。
"1aaaaa 1aa 1aaa" "2bbbbb 2bbb" |
ですので、上記のようなテキストがクリップボードに入ればよいということになります。
ボタンを用意して、下記のコードを書いてみてください。
private void button1_Click( object sender, EventArgs e ) { StringBuilder builder = new StringBuilder(); foreach( DataGridViewCell curCell in dataGridView1.SelectedCells ) { builder.Append( "\"" + curCell.Value + "\"" + Environment.NewLine ); } Clipboard.SetText( builder.ToString() ); } |
DataGridViewのコピーしたいセルを選択した状態で上記のコードを走らせると、選択範囲のテキストがクリップボードにコピーされます。
コピーしたテキストをExcelにペーストすると下記のように改行を含めて正しくコピペが行えました。

関連記事
[…] lに貼り付けができない場合」 行末のCRLFがついているデータの場合は、コピペがうまくいかないのを修正しました。 参考にさせていただいたサイトに感謝:http://nanoappli.com/blog/archives/7525 […]
[…] lに貼り付けができない場合」 行末にCRLFがついているデータの場合は、コピペがうまくいかないのを修正しました。 参考にさせていただいたサイトに感謝:http://nanoappli.com/blog/archives/7525 […]