VB.NET - 为什么我的Excel读取跳过第一行?

cos*_*ost 1 vb.net excel

有一个程序使用OLEDB读取Excel文件并将其转换为制表符分隔的文本文件.此循环处理转换.

While reader.Read
            Dim count As Integer = 0
            Try
                While (True)
                    temp = reader(count).ToString + ControlChars.Tab
                    output_file.Write(temp)
                    count += 1
                End While
            Catch ex As Exception
                output_file.WriteLine()
            End Try


        End While
Run Code Online (Sandbox Code Playgroud)

不是最优雅的代码,但它会逐个读入每个单元格,然后在行的末尾抛出异常以写入换行符.唯一的问题是它会跳过Excel文档的第一行.知道为什么吗?

Tim*_*Tim 6

要获得更优雅的解决方案,请试试这个:

While reader.Read()

    For i As Integer = 0 To reader.FieldCount - 1
        output_file.Write(reader(i).ToString() + ControlChars.Tab)
    Next

    output_file.WriteLine()
End While
Run Code Online (Sandbox Code Playgroud)

从阅读器中读取每一行,并使用行中的字段数(.FieldCount)处理FOR循环中行中的字段.

每个FOR循环完成后,结束文件中的行.

对阅读器中的每一行重复此操作.

最好不要使用异常来处理代码中的事件,否则可以处理它们(例如,抛出一个处理FileNotFoundException - 或抛出一个 - 而不是简单地执行File.Exits检查).

更新 做了一点谷歌搜索,似乎你可以通过连接字符串包含/排除标题:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

请注意HDR =是部分.根据Excel的连接字符串,这用于指示第一行是否为标题.

您可能尝试的另一件事是查看读者的字段是否在其Name属性中具有值,使用reader.GetName(int index),其中index是列(字段)的从零开始的序数.