CSV形式・TSV形式のデータをクリップボードに出し入れする方法を記載します。

・CSV形式とは、カンマ区切りで、TSV形式とは、タブ区切りです。

 

クリップボードにCSV形式のデータをコピーする

CSV形式をクリップボードにコピーするには、DataObjectクラスのSetDataメソッドを使用する

パラメータに、DataFormats.CommaSeparatedValueを指定する

また、文字コードをシフトJISに変換するため、Encodingクラス、MemoryStreamクラスを使用する

Dim csv As String = "あ,B,C" & vbCrLf & "D,E,F"

'文字コードを変換するためにMemoryStreamに変換する
Dim bytes As Byte() = System.Text.Encoding.GetEncoding("sjis").GetBytes(csv)
Dim ms As New System.IO.MemoryStream(bytes)

'CSV形式のデータを設定する
Dim data As New DataObject()
data.SetData(DataFormats.CommaSeparatedValue, ms)

'クリップボードにコピーする
Clipboard.SetDataObject(data)

 

クリップボードにTSV形式のデータをコピーする

TSVの場合、テキストとして、クリップボードに出し入れ出来ます。

Dim tsv As String = "A" & vbTab & "B" & vbTab & "C" & vbCrLf & "D"
Clipboard.SetText(tsv)

CSV形式のように、DataObjectクラスを使用することも出来ます。

Dim tsv As String = "A" & vbTab & "B" & vbTab & "C" & vbCrLf

Dim data As New DataObject()
data.SetData(DataFormats.Text, tsv)

'クリップボードにコピーする
Clipboard.SetDataObject(data)

 

クリップボードからCSV形式のデータを取得する

Dim csv As String

If Clipboard.ContainsData(DataFormats.CommaSeparatedValue) Then
    Dim data As DataObject = Clipboard.GetDataObject()

    Dim csvData As Object = data.GetData(DataFormats.CommaSeparatedValue)
    If TypeOf csvData Is System.IO.MemoryStream Then
        Dim ms As System.IO.MemoryStream = DirectCast(csvData, System.IO.MemoryStream)
        'エンコードして、文字列に変換する
        csv = System.Text.Encoding.GetEncoding("sjis").GetString(ms.ToArray())
    End If
End If