2012-03-30 33 views
7

我想用C#讀取混合數據類型的excel文件。下面是我的連接字符串在不修改註冊表項的情況下讀取Excel InterMixed DataType

var path = //xls location 
var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;IMEX=1;'"); 

研究告訴我說,在連接字符串中完全Extended Properties應該是

Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text

不過,我還是那個通知在連接字符串中,TypeGuessRows=0有沒有意義作爲價值將直接從註冊表採取。因此,我需要手動修改密鑰並從連接字符串中刪除此屬性。這是參與

特定的註冊表項是:

路徑:

HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\噴氣\ 4.0 \發動機\ Excel中

重點:

TypeGuessRows

原值= ,以使其發揮作用的變化爲=

沒有這樣做的IMEX將無法​​正常工作,甚至強硬。我添加TypeGuessRows=0Extended Properties

但是,我的公司禁止修改註冊表值(嚴格)。我被告知要找到替代方案。

簡而言之:

有沒有辦法來讀取混合數據類型的練成文件無需修改任何註冊表項(這是一個相當普遍的做法)?

進一步話題:

你以前的經驗?有沒有可能,我們可以從連接字符串只設置TypeGuessRows=0而無需修改註冊表項(取消我的上述前提)。

如果事情不OleDb工作了:

是否有OleDb旁邊的選擇嗎?

我欣賞任何意見或建議。

問候

回答

6

你可以做的是要求具有在Excel中第一行標題,並設置連接字符串

var MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties='Excel 8.0;HDR=No;IMEX=1;'"); 

這裏的關鍵是設置HDR =無(無標頭),但是既然你有頭現在每列將被視爲字符串(文本),並且您可以對每個單元格值進行解析或驗證。當然,您需要跳過或刪除第一行,因爲它包含標題信息。

2

而不是使用OleDb的,我知道用Excel Data Reader。它非常有效!強烈推薦!

+0

偉大的發現!謝謝! – Bronek 2014-04-12 20:16:40

相關問題