記事内に広告が含まれています。

【VB.NET】CSVを読み込んでDataTableに入れる

VB.NETでCSVを読み込んで、DataTableに入れる方法です。

【スポンサーリンク】

CSVを読み込んでDataTableに入れる

CSVを読み込んでDataTableに入れる場合、Jet Providerを使うことで実現可能です。

再現のため、簡単な画面を作りました。

  1. 左上のテキストボックスにフルパスを入力して「CSV取り込み」ボタンをクリック
  2. CSVの中身をデータテーブルに入れる
  3. データテーブルの中身をループして下のテキストボックスに出力

という仕様です。

【スポンサーリンク】

実装

サンプルコードはこちら。Jet Providerを使っています。

Private Sub cmdImportCSV_Click(sender As Object, e As EventArgs) Handles cmdImportCSV.Click
    'フルパスからCSV格納ディレクトリを取得
    Dim strTargetDir As String = System.IO.Path.GetDirectoryName(txtTarget.Text)

    'フルパスからファイル名取得
    Dim srtTargetFile As String = System.IO.Path.GetFileName(txtTarget.Text)

    '接続文字列の作成
    '1行目をヘッダーとして取り込んだ場合
    Dim strCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strTargetDir &
                              ";Extended Properties=""text;HDR=Yes;FMT=Delimited"""

    ''1行目をヘッダーとせずに取り込んだ場合
    'Dim strCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strTargetDir &
    '                          ";Extended Properties=""text;HDR=No;FMT=Delimited"""

    'OLEDBのコネクション作成
    Dim objCon As New System.Data.OleDb.OleDbConnection(strCon)

    'DataAdapterでCSVの中身を取得
    Dim strCommand As String = "SELECT * FROM [" + srtTargetFile + "]"
    Dim ojbDataAdapter As New System.Data.OleDb.OleDbDataAdapter(strCommand, objCon)

    'DataTableに格納
    Dim objDataTable As New DataTable
    ojbDataAdapter.Fill(objDataTable)

    'テキストボックスに表示
    For Each row As DataRow In objDataTable.Rows
        '1行目をヘッダーとして取り込んだ場合
        txtResult.Text += row("名前") & ","
        txtResult.Text += row("年齢") & ","
        txtResult.Text += row("性別") & vbCrLf

        ''1行目をヘッダーとせずに取り込んだ場合
        'For iCnt As Integer = 0 To objDataTable.Columns.Count - 1
        '    txtResult.Text += row(iCnt) & ","
        'Next
        ''末尾のカンマ削除、改行コード挿入
        'txtResult.Text = txtResult.Text.TrimEnd(CType(",", Char)) & vbCrLf
    Next
End Sub

1行目をヘッダーとして扱う場合は、接続文字列の作成で「HDR=Yes」と記載し、1行目をヘッダーとして扱いたくない場合は、「HDR=No」と記載します。

'1行目をヘッダーとして扱う
Dim strCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "対象フォルダ" &
                          ";Extended Properties=""text;HDR=Yes;FMT=Delimited"""

'1行目をヘッダーとして扱わない
Dim strCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "対象フォルダ" &
                          ";Extended Properties=""text;HDR=No;FMT=Delimited"""

実行するとこうなります。

DataTableと聞くとちょっと身構えてしまうかもしれませんが、案外簡単にできます。

【スポンサーリンク】

参考リンク

DataTable クラス|Microsoft Docs

【スポンサーリンク】

関連記事

【VB.NET】TextFieldParserを使って超簡単にCSVファイルを読み込む!
若手エンジニアから「CSVファイルの読み込み方がわからん」と言われたので書きます。最終目的としてはCSVでインポートしたデータをグリッドに表示したいらしいのですが、まずはCSV読み込むところから始めましょう。別に難しい事ではありません。「あ...
【スポンサーリンク】

鉄道記事も書いてます!

ちょっとリフレッシュして鉄道記事も読んでみませんか?

鉄道記事バックナンバーはこちら↓

鉄道コム投稿記事一覧ページ