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 

当然不是最优雅的代码,但它会逐个读入每个单元格,然后在该行的末尾引发exception以写入换行符。 唯一的问题是它跳过Excel文档的第一行。 任何想法为什么?

为了更优雅的解决scheme,试试这个:

 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循环完成后,结束文件中的行。

重复阅读器中的每一行。

最好不要使用exception来处理代码中的事件,否则这些事件可能会被处理(例如抛出一个FileNotFoundExceptionexception – 或抛出一个 – 而不是简单地执行File.Exits检查)。\

更新做了一点Googlesearch,看来你可以通过连接string包括/排除头:

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

注意HDR =是的部分。 根据Excel的连接string,这用于指示第一行是否为标题。

另一件你可能会尝试的事情是,如果阅读器的字段在其Name属性中使用reader.GetName(int index),其中index是列(字段)的从零开始的序号,则可以看到它们的值。