【问题标题】:VB.NET - Why does my Excel read skip the first line?VB.NET - 为什么我的 Excel 读取跳过第一行?
【发布时间】:2011-08-24 19:57:46
【问题描述】:

有一个程序使用 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 文档的第一行。知道为什么吗?

【问题讨论】:

  • Excel文件的第一行是标题行吗?
  • @Tim 里面确实有标题信息,是的,但是在 Excel 中是否有特定的设置来指定一行作为标题?我并没有真正使用 excel(我自己什至没有,我现在正在使用 Open Office 查看器)
  • 我不知道将行指定为标题的设置,但如果第一行只是标题行,我不会担心,除非你想将它复制到你的标签- 分隔文件。让我环顾四周,看看我能找到什么,如果有的话。
  • @Tim 不幸的是,我最需要这个 Excel 文档中的数据是标题,因此获取第一行是必不可少的
  • 您可以发布您用于阅读 Excel 文档的连接字符串吗?

标签: vb.net excel


【解决方案1】:

要获得更优雅的解决方案,请尝试以下操作:

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

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

每个 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=Yes 部分。根据Connection strings for Excel,这用于指示第一行是否为标题。

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

【讨论】:

  • 是的,这样更好。我使用 while 循环有一个例外只是因为我不知道如何如此轻松地获取字段计数。不过我会做出这个改变,谢谢
  • 我停止使用异常来处理类似的事情,但这是我早期编程时遗留下来的一个实用程序,所以这种不好的做法仍然存在。
  • 它现在可以工作了,虽然现在它有一个新的、奇怪的错误。它读取标题单元格,除了两个。中间只有两个。单步执行代码,我发现数据库读取只是为特定读取返回“”。我得做一些调查。编辑:似乎与该列中的数据采用数据格式有关。嗯,我可以解决这个问题。感谢您的帮助
  • 哦,是的,我应该指出,您更优雅的解决方案的运行速度比有例外的解决方案快一千倍
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多