使用OleDB获取Excel工作表数据,但它“随机”不读取行的单元格数据

时间:2015-02-06 16:47:53

标签: .net vb.net excel oledb

我目前正在尝试从数千个excel文件中提取某些数据。但是这个问题让我非常疯狂,而且我在时间紧迫的情况下在短暂的截止日期之前完成所有这些工作。

问题是它似乎没有检索到所有数据,特别是这些"选项"我称之为列。对于这个特殊的工作表,它应该有-01一直到-10。这些是整张纸上有时无法读入的唯一值。它们有时倾斜45度角,但如果我在阅读文件之前手动更改其方向,它似乎没有什么区别。

这就是它正在做的事情: Missing certain cells' data...

这是有问题的excel文件(不确定该链接是否有效):
https://drive.google.com/file/d/0B7-iwpcLS0GoaVpHYkxPTWdIYUE/view?usp=sharing

如果Google电子表格失败,请直接下载链接:
http://www.filedropper.com/123456_1

这是我使用ripped out of my application的基本代码:

Dim xlAppIn As New Excel.Application
Dim xlWorkbookIn As Excel.Workbook = xlAppIn.Workbooks.Open(sFilename)
xlAppIn.Visible = False

Dim oleDbConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & sFilename & ";Extended Properties='Excel 12.0; HDR=No; IMEX=1'"
Dim oleDbConn As OleDbConnection = New OleDbConnection(oleDbConnStr)
oleDbConn.Open()

Dim sSheetName As String = xlWorkbookIn.Sheets(1).Name.ToString()
txtStatus.Text = sSheetName

'Dim oleDbCmd As New OleDbCommand("SELECT * FROM [" & sSheetName & "$B5:AI46]", oleDbConn)
Dim oleDbCmd As New OleDbCommand("SELECT * FROM [" & sSheetName & "$]", oleDbConn)
Dim oleDbDa As New OleDbDataAdapter(oleDbCmd)

Dim dt As New DataTable
oleDbDa.Fill(dt)
dgvRaw.DataSource = dt

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

我终于明白了,但我不确定为什么这很重要。

我必须将单元格格式化为Excel内的文本并在尝试使用我的程序加载文件之前保存它。我猜的一些单元格没有格式化为文本,因此它不会费心阅读它。

我甚至在没有IMEX = 1的情况下进行了测试,同样的事情发生了。


如果有一种方法可以以快速的方式自动化它,那就太好了。 例如:打开文件,格式化所有工作表文本,然后从中读取。

想出来......

'nSheetPos being iterator for looping through the sheets in the workbook
xlWorkbookIn.Sheets(nSheetPos).Columns.NumberFormat = "@"
xlWorkbookIn.Save()