我必須在這個形式的Excel文件的文件:新奇SELECT從Excel通過OleDbDataAdapter的方法(C#)
Column 1 Column 2 Column 3
data1 data2
data1 data2
data1 data2
data1 data2
data1 data2 data3
也就是說,整個第3欄是除了最後一排空。 我通過OleDbDataAdapter訪問Excel文件,返回一個DataTable:這裏是代碼。
query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;
的一點是,在這種情況下我的代碼返回與單純的列1和列數據表2.
我的猜測是,JET引擎試圖通過最先細胞在每一個類型推斷列類型柱;作爲第一個值null,整個列被忽略。
我試圖填充零,這段代碼實際上是返回所有三列;這顯然是最不可取的解決方案,因爲我必須處理大量的小文件。
反轉選擇範圍(從「A1:C5」到「C5:A1」)也不起作用。 我正在尋找更優雅的東西。
我已經發現了一些討論類型不匹配的帖子(int列中的varchar單元格,反之亦然),但實際上並未發現與此相關的任何內容。
感謝您的閱讀!
編輯
再次怪異行爲。我必須主要處理Excel 2003 .xls文件,但由於此問題已得到解答,因此我認爲我可以針對Excel 2007 .xslx文件測試我的代碼。 連接字符串如下:
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";
我得到的「外部表不是預期的格式」異常,我估計是標準的異常時,有ACE/JET和文件版本不匹配是打開。
字符串
Provider=Microsoft.ACE.OLEDB.12.0
意味着,我使用的是最新的OLEDB的版本,我參加了一個快速瀏覽一下四周,這個版本是用來處處有需要連接的.xlsx文件。
我試過了,只是一個香草提供者(只是Excel 12.0,沒有IMEX或HDR),但我得到了同樣的異常。
我在.NET 2.0.50727 SP2上,也許有時間升級?
因此,Excel中的列上沒有標題?你有沒有試過連接上的IMEX開關? – Sorax 2010-12-01 15:57:28
有一些標題,但我選擇的表格中只包含數據的部分避免了水平和垂直標題。 – SimoneF 2010-12-02 08:09:34