使用OleDB获取Excel Sheet数据,但是"randomly"没有读取一行的单元格数据
Using OleDB to get Excel Sheet Data, but it's "randomly" not reading cell data of a row
我目前正在尝试从数千个 excel 文件中提取某些数据。但这个问题让我非常抓狂,我正赶在截止日期前完成所有这些工作。
问题是它似乎没有检索所有数据,尤其是我所说的这些 "option" 列。对于这个特定的 sheet,它应该从 -01 一直到 -10。这些是整个 sheet 中唯一有时未读入的值。它们有时倾斜 45 度角,但如果我在读取文件之前手动更改它们的方向似乎没有什么不同英寸
这是它正在做的事情:
这是有问题的 excel 文件(不确定 link 是否有效):
https://drive.google.com/file/d/0B7-iwpcLS0GoaVpHYkxPTWdIYUE/view?usp=sharing
直接下载link如果Google传播sheet失败:
http://www.filedropper.com/123456_1
这是我使用的从我的应用程序中删除的基本代码:
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
我做错了什么?
我终于弄明白了,但我不确定它为什么重要。
我必须将单元格格式化为 Excel 内的文本并保存它,然后再尝试使用我的程序加载文件。我猜有些单元格没有格式化为文本,所以它不会费心阅读它。
我什至在没有 IMEX=1 的情况下进行了测试,同样的事情发生了。
现在,如果有一种方法可以快速 实现自动化,那就太好了。
例如:打开文件,格式化所有工作表文本,然后从中读取。
也想通了...
'nSheetPos being iterator for looping through the sheets in the workbook
xlWorkbookIn.Sheets(nSheetPos).Columns.NumberFormat = "@"
xlWorkbookIn.Save()
我目前正在尝试从数千个 excel 文件中提取某些数据。但这个问题让我非常抓狂,我正赶在截止日期前完成所有这些工作。
问题是它似乎没有检索所有数据,尤其是我所说的这些 "option" 列。对于这个特定的 sheet,它应该从 -01 一直到 -10。这些是整个 sheet 中唯一有时未读入的值。它们有时倾斜 45 度角,但如果我在读取文件之前手动更改它们的方向似乎没有什么不同英寸
这是它正在做的事情:
这是有问题的 excel 文件(不确定 link 是否有效):
https://drive.google.com/file/d/0B7-iwpcLS0GoaVpHYkxPTWdIYUE/view?usp=sharing
直接下载link如果Google传播sheet失败:
http://www.filedropper.com/123456_1
这是我使用的从我的应用程序中删除的基本代码:
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
我做错了什么?
我终于弄明白了,但我不确定它为什么重要。
我必须将单元格格式化为 Excel 内的文本并保存它,然后再尝试使用我的程序加载文件。我猜有些单元格没有格式化为文本,所以它不会费心阅读它。
我什至在没有 IMEX=1 的情况下进行了测试,同样的事情发生了。
现在,如果有一种方法可以快速 实现自动化,那就太好了。 例如:打开文件,格式化所有工作表文本,然后从中读取。
也想通了...
'nSheetPos being iterator for looping through the sheets in the workbook
xlWorkbookIn.Sheets(nSheetPos).Columns.NumberFormat = "@"
xlWorkbookIn.Save()