2013-12-19 25 views
2

我正在使用ACE.OLEDB從C#應用程序讀取excel文件。 一切都工作得很好,直到今天,我發現其中一個列名稱被錯誤地讀取。ACE.OLEDB提供程序錯誤地讀取某些列名

下面是我在Excel中已經有了文件

Here's what I've got in my excel file

這裏就是我有我的調試器

And here's what is read in the code

基本點( 「」)是由於某種原因被替換爲散列(「#」)。

該代碼很簡單,大部分工作正常,不認爲問題存在,但爲了清晰起見,將在此顯示。

DataTable data = new DataTable();  
string strAccessConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path.FullName + ";Extended Properties=\"Excel 12.0\";\"HDR=YES\";\"IMEX=1;\"";  
OleDbConnection myAccessConn = new OleDbConnection(strAccessConn); 
string strAccessSelect = "select * from [" + SheetName + "];"; 
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn); 
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);       
myDataAdapter.Fill(0, maxRows, data); 

有沒有我做錯了或者它是OLEDB中的錯誤?

+0

這不是一個錯誤,它是一個功能。只要做String.Replace就可以了。 – Taosique

+0

認真嗎?你能詳細說明嗎?我正在閱讀excel中的大文件,我可能有很多有效的'。'符號,我不能盲目地用'#'代替它們。 – taralex

回答

1

此問題只發生在標題行,這是因爲它阻止在Excel文件標題中顯示點(。)。 Excel文件標題中的點(當轉換爲XML時)可能會導致一些問題。儘管XML中的.沒有意義,但Excel如何來回序列化必須有額外的約定(不是100%)。因此,在輸入數據時,您可以簡單地將#並將其轉換爲Excel中的標題中的.,並且當您輸出的標題爲.時,它將顯示爲#

要解決此問題,您可以簡單地通過將您的連接字符串標題語法更改爲HDR=No來打開您的標題。當數據獲取而不是作爲標題,但正常行則可以很容易地處理爲浮點數,並且.不會導致任何問題。

0

我來到這裏尋找從Excel中的標題行取得的特殊字符的列名轉換參考。使用SQL這樣的:

select * from 
OPENROWSET(
'Microsoft.ACE.OLEDB.12.0','Excel 12.0; 
Database=<INSERT-FILENAME>; 
Extended Properties=Excel 12.0;IMEX=1;' 
,'select * From [Sheet1$]') 

這裏是我見過的轉換:

Excel | SQL 
----------------------- 
[  | (
]  |) 
.  | # 
!  | _ 
`  | _ 

這是不是一個完整列表,但它可以幫助別人。我已經將答案留作社區wiki,以便可以自由編輯。

相關問題