標籤:pat 路徑 out for target select string 處理 分享
C#讀取Excel檔案的內容,通過OLEDB來串連,關鍵是串連的路徑,
如:string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;";
串連的路徑涉及3方面:
1. Provider:使用的是OLEDB串連,但是這個技術會不時更新,使用前查詢最新的版本;
2. Data Source: 就是Excel檔案的路徑;
3. Extended Properties: 指定Excel的版本,同上,使用前查詢最新的版本(要與讀取的Excel檔案儲存一致);
讀取不同的Sheet,方式跟SQL類似:
string strExcel = "select * from [sheet3$]";
1 public DataSet ReadFile(string filePath) 2 { 3 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;"; 4 OleDbConnection conn = new OleDbConnection(strConn); 5 conn.Open(); 6 string strExcel = "select * from [sheet3$]"; 7 OleDbDataAdapter da = new OleDbDataAdapter(strExcel, strConn); 8 DataSet ds = new DataSet(); 9 try10 {11 da.Fill(ds);12 }13 catch (Exception ex)14 {15 throw new Exception("讀取Excel失敗:" + ex.Message);16 }17 return ds;18 }
View Code
異常處理:
1.如果出現 External table is not in the expected format.
大部分都是因為路徑中的OLEDB或者Extended Properties與當前的Excel檔案版本不對應導致的,本人當時就是如下情況:
舊的:string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=‘Excel 8.0;HDR=NO;IMEX=1‘;";
修改後:string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=Excel 12.0;";
2.如果出現 The ‘XXXXXXXXX‘ provider is not registered on the local machine
那是因為Platform target配置不當的問題,OLEDB貌似只支援x86, 所以你只需要到項目屬性 -> Bulid -> Platform target -> x86就可以了
C#讀取excel檔案的內容(使用DataSet)