Vb.net 读取excel CSV文件时跳过第一行

Vb.net 读取excel CSV文件时跳过第一行,vb.net,excel,csv,Vb.net,Excel,Csv,我在几种语言中找到了如何做到这一点,但在.net(特别是vb.net)中没有找到。我正在使用OLeDbCommand读取CSV和Excel文件。对于Excel,我可以跳过第一行,然后通过指定单元格范围选择第二行。但在CSV的情况下,我不知道如何做。 当前代码如下所示: Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [" + Path.GetFileName(FileName) + "]", cn) 这里我们给出的是文件,不

我在几种语言中找到了如何做到这一点,但在.net(特别是vb.net)中没有找到。我正在使用OLeDbCommand读取CSV和Excel文件。对于Excel,我可以跳过第一行,然后通过指定单元格范围选择第二行。但在CSV的情况下,我不知道如何做。 当前代码如下所示:

 Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [" + Path.GetFileName(FileName) + "]", cn)

这里我们给出的是文件,不是表格。所以我有点卡住了。

根据我的经验,阅读这样的文本文件是非常有限制的。它只允许您读取整个文件,因为您不能指定表名。您最好阅读每一行并生成表行,然后将它们添加到表中。如果第一行是标题,您可以使用它来生成列,否则将对列进行硬编码

下面是一个简单的小方法,它使用.csv文件中的数据填充datatable,您应该能够使用:

Private Sub GetData(ByRef dt As DataTable, FilePath As String, Optional ByVal Header As Boolean = True)
    Dim Fields() As String
    Dim Start As Integer = CInt(Header) * -1
    If Not File.Exists(FilePath) Then
        Return
    End If
    dt.Clear()
    Dim Lines() As String = File.ReadAllLines(FilePath)
    If CBool(Start) AndAlso dt.Columns.Count = 0 Then
        Lines(0) = Lines(0).Replace(Chr(34), "")
        For Each h As String In Lines(0).Split(",")
            dt.Columns.Add(h)
        Next
    End If
    For I = Start To Lines.Count - 1
        Fields = Lines(I).Split(",")
        dt.Rows.Add(Fields)
    Next
End Sub

我同意。但我的文件是一个“MicrosoftExcel逗号分隔值文件”,它使用Excel打开,其中包含包含所有其他Excel功能的工作表。但是如果有一张纸的名字,我就看不懂,所以我必须看整个文件。有没有办法将CSV转换为Excel?“使用Excel打开,其中包含工作表”-CSV文件没有工作表,因为它只是一个纯文本文件。Excel将打开它并从中创建一个Excel文件(即,它在Excel中显示为单个工作表),但CSV文件仅包含内容。有关此行为的一些讨论,请参阅。