有一个程序使用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文档的第一行。知道为什么吗?
答案 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是列(字段)的从零开始的序号。