2010-08-15 268 views
14

如何读取CSV文件并在Visual Basic 2010的网格中显示结果?这听起来很简单,但Google搜索一段时间后仍然无法找到答案。我有一个窗体上的DataGridView,它被称为DataGridView1。我有一个只有3列数据的csv,我希望能够显示它们。如何读取CSV文件并在Visual Basic 2010的网格中显示结果?

+1

你有没有看着http://stackoverflow.com/questions/1405038/reading-csv-files-in-net – InSane 2010-08-15 02:25:04

回答

4

考虑这段代码。按照您认为合适的方式修改,或适合您的要求。您需要为System.IOSystem.Data.OleDb提供Imports对帐单。

Dim fi As New FileInfo("c:\foo.csv") 
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fi.DirectoryName 

Dim conn As New OleDbConnection(connectionString) 
conn.Open() 

'the SELECT statement is important here, 
'and requires some formatting to pull dates and deal with headers with spaces. 
Dim cmdSelect As New OleDbCommand("SELECT Foo, Bar, FORMAT(""SomeDate"",'YYYY/MM/DD') AS SomeDate, ""SOME MULTI WORD COL"", FROM " & fi.Name, conn) 

Dim adapter1 As New OleDbDataAdapter 
adapter1.SelectCommand = cmdSelect 

Dim ds As New DataSet 
adapter1.Fill(ds, "DATA") 

myDataGridView.DataSource = ds.Tables(0).DefaultView 
myDataGridView.DataBind 
conn.Close() 
+1

您正在使用的数据库引擎解析一个CSV文件?这似乎是超级大胆的矫枉过正。至少代码是简短的:) – 2010-08-15 02:26:23

+1

@梅林:谢谢,我想。不知道什么可以考虑通过OleDb/Jet查询矫枉过正。据我估计,过度使用将会是Excel COM API。 OP对性能,优雅,冷静或企业模式没有任何要求。这只是一个建议。期待您的解决方案。 – 2010-08-15 03:25:05

+0

谢谢你们我会试试 – xiaodai 2010-08-15 07:49:41

2

请看这个CodeProject文章/项目:LINQ TO CSV

它将使您能够创建一个类似.csv文件列的自定义类。然后,您将使用CSV并绑定到您的DataGridView。

Dim cc As new CsvContext() 
Dim inputFileDescription As New CsvFileDescription() With { _ 
    .SeparatorChar = ","C, _ 
    .FirstLineHasColumnNames = True _ 
} 

Dim products As IEnumerable(Of Product) = _ 
    cc.Read(Of Product)("products.csv", inputFileDescription) 

' query from CSV, load into a new class of your own 
Dim productsByName = From p In products 
    Select New CustomDisplayClass With _ 
     {.Name = p.Name, .SomeDate = p.SomeDate, .Price = p.Price}, _   
    Order By p.Name 


myDataGridView1.DataSource = products 
myDataGridView1.DataBind() 
+0

我会有一个破解 – xiaodai 2010-08-16 00:14:11

14

使用内置于.Net框架中的TextFieldParser类。

下面是Paul Clement的一个MSDN forum post复制的代码。它的CSV转换成新的内存中的DataTable,然后绑定的DataGridView到DataTable

Dim TextFileReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\Documents and Settings\...\My Documents\My Database\Text\SemiColonDelimited.txt") 

    TextFileReader.TextFieldType = FileIO.FieldType.Delimited 
    TextFileReader.SetDelimiters(";") 

    Dim TextFileTable As DataTable = Nothing 

    Dim Column As DataColumn 
    Dim Row As DataRow 
    Dim UpperBound As Int32 
    Dim ColumnCount As Int32 
    Dim CurrentRow As String() 

    While Not TextFileReader.EndOfData 
     Try 
      CurrentRow = TextFileReader.ReadFields() 
      If Not CurrentRow Is Nothing Then 
       ''# Check if DataTable has been created 
       If TextFileTable Is Nothing Then 
        TextFileTable = New DataTable("TextFileTable") 
        ''# Get number of columns 
        UpperBound = CurrentRow.GetUpperBound(0) 
        ''# Create new DataTable 
        For ColumnCount = 0 To UpperBound 
         Column = New DataColumn() 
         Column.DataType = System.Type.GetType("System.String") 
         Column.ColumnName = "Column" & ColumnCount 
         Column.Caption = "Column" & ColumnCount 
         Column.ReadOnly = True 
         Column.Unique = False 
         TextFileTable.Columns.Add(Column) 
        Next 
       End If 
       Row = TextFileTable.NewRow 
       For ColumnCount = 0 To UpperBound 
        Row("Column" & ColumnCount) = CurrentRow(ColumnCount).ToString 
       Next 
       TextFileTable.Rows.Add(Row) 
      End If 
     Catch ex As _ 
     Microsoft.VisualBasic.FileIO.MalformedLineException 
      MsgBox("Line " & ex.Message & _ 
      "is not valid and will be skipped.") 
     End Try 
    End While 
    TextFileReader.Dispose() 
    frmMain.DataGrid1.DataSource = TextFileTable 
+0

这真是太棒了!!!!!谢谢 – MonkeyDoug 2013-11-22 18:57:27

+0

伟大的代码,明确表决。 – htm11h 2014-01-24 16:20:36

+1

'TextFileReader.SetDelimeters(new string(){“;”})'这可以帮助任何人,因为它帮助我 – Yog 2016-03-25 08:47:28

2
For Each line As String In System.IO.File.ReadAllLines("D:\abc.csv") 
    DataGridView1.Rows.Add(line.Split(",")) 
Next 
0

这似乎多了几分优雅

'populate DT from .csv file 

Dim items = (From line In IO.File.ReadAllLines("C:YourData.csv") _ 
Select Array.ConvertAll(line.Split(","c), Function(v) _ 
v.ToString.TrimStart(""" ".ToCharArray).TrimEnd(""" ".ToCharArray))).ToArray 

Dim Your_DT As New DataTable 
For x As Integer = 0 To items(0).GetUpperBound(0) 
Your_DT.Columns.Add() 
Next 

For Each a In items 
Dim dr As DataRow = Your_DT.NewRow 
dr.ItemArray = a 
Your_DT.Rows.Add(dr) 
Next 

Your_DataGrid.DataSource = Your_DT   
0

这是你可以读取数据.csv文件使用OLEDB供应商。

If OpenFileDialog1.ShowDialog(Me) = DialogResult.OK Then 
     Try 
      Dim fi As New FileInfo(OpenFileDialog1.FileName) 
      Dim sConnectionStringz As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fi.DirectoryName 
      Dim objConn As New OleDbConnection(sConnectionStringz) 
      objConn.Open() 
      'DataGridView1.TabIndex = 1 
      Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & fi.Name, objConn) 
      Dim objAdapter1 As New OleDbDataAdapter 
      objAdapter1.SelectCommand = objCmdSelect 
      Dim objDataset1 As New DataSet 
      objAdapter1.Fill(objDataset1) 

      '--objAdapter1.Update(objDataset1) '--updating 
      DataGridView1.DataSource = objDataset1.Tables(0).DefaultView 
     Catch ex as Exception 
      MsgBox("Error: " + ex.Message) 
     Finally 
      objConn.Close() 
     End Try 
    End If 
0

执行以下操作:

Dim dataTable1 As New DataTable 
       dataTable1.Columns.Add("FECHA") 
       dataTable1.Columns.Add("TT") 
       dataTable1.Columns.Add("DESCRIPCION") 
       dataTable1.Columns.Add("No. DOC") 
       dataTable1.Columns.Add("DEBE") 
       dataTable1.Columns.Add("HABER") 
       dataTable1.Columns.Add("SALDO") 

For Each line As String In System.IO.File.ReadAllLines(objetos.url) 
        dataTable1.Rows.Add(line.Split(",")) 
       Next 
+1

你可以使用Datatable :) – 2016-10-31 16:40:32

相关问题