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

时间:2011-08-24 19:57:47

标签: 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

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

1 个答案:

答案 0 :(得分: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

从阅读器中读取每一行,并使用行中的字段数(.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 =是部分。根据{{​​3}},这用于指示第一行是否是标题。

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