2015-02-06 56 views
1

我目前正試圖從成千上萬的Excel文件中提取某些數據。但是,這個問題讓我非常瘋狂,而且我正在緊張的工作中,在短時間內完成所有這些工作。使用OleDB獲取Excel工作表數據,但它「隨機」不讀取一行的單元格數據

問題是,它似乎沒有檢索所有的數據,特別是這些「選項」列,因爲我稱之爲。它應該一直到-10這個特定的表。這些是整張紙上唯一有時無法讀入的值。它們有時會傾斜45度角,但如果在讀取文件之前手動更改其方向,似乎沒有什麼區別。

這是它在做什麼: Missing certain cells' data...

這是有問題的Excel文件(不知道這個鏈接將工作):
https://drive.google.com/file/d/0B7-iwpcLS0GoaVpHYkxPTWdIYUE/view?usp=sharing

直接下載鏈接,如果說谷歌電子表格失敗:
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 

我在做什麼錯在這裏?

+0

我猜,也許這是我的連接字符串?或者,也許文件類型太舊?這可能是一箇舊的excel文件,由誰知道什麼版本等,我很茫然。 – Keith 2015-02-06 16:50:35

+0

它看起來對我很正確。注意:原始的Excel工作表具有零高度的第26行......但它在那裏。 – 2015-02-06 16:57:17

+0

我已經添加了一個下載鏈接:http://www.filedropper.com/123456_1以防萬一它是一種奇怪的excel版本問題,你們也可以加載它,看看它是否適合你。 – Keith 2015-02-06 17:00:59

回答

2

我終於明白了,但我不知道它爲什麼重要。

我不得不格式化單元格到Excel裏面的文本,並在嘗試使用我的程序加載文件之前保存它。我猜一些單元格沒有格式化爲文本,所以它不會讀取它的內容。

我甚至在沒有IMEX = 1的情況下進行測試,發生同樣的事情。現在


這將會是很好,如果有自動,在一個快速時尚的方式。 例如:打開文件,格式化所有工作表文本,然後從中讀取。

想通了這一點,以及...

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