2016-06-09 44 views
2

我有兩個彼此不相關的程序,但他們有一個相同的方法,他們試圖從excel文件中讀取行。兩個程序試圖讀取excel一個成功一個失敗,代碼相同

計劃1

public DataTable GetExcelInfo(string filepath) 
    { 
     DataTable datatab = new DataTable(); 
     try 
     { 
      string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\"; 
      using (OleDbConnection conn = new OleDbConnection(connectionString)) 
      { 
       conn.Open(); 
       OleDbCommand cmd = new OleDbCommand("SELECT Format([F1], \"#\"), Format([F2], \"#\"), Format([F3], \"#\") FROM [Sheet1$]", conn); 
       OleDbDataReader reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        string[] values = new string[3];       
        values[0] = reader.GetString(0); 
        values[1] = reader.GetString(1); 
        values[2] = reader.GetString(2); 

        DataRow dr = datatab.NewRow(); 
        dr.ItemArray = values; 
        datatab.Rows.InsertAt(dr, i); 
        i++; 
       } 
      } 
     } 
    } 

計劃2

private static DataTable GetInvoiceItems(string filepath) 
{ 
     DataTable dt = new DataTable(); 
     string excelConString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel=8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\"; 
     using (OleDbConnection conn = new OleDbConnection(excelConString)) 
     { 
      OleDbDataAdapter ada = new OleDbDataAdapter("SELECT [F1], [F2], [F3], [F4], [F5] FROM [Sheet1$]", conn); 
      conn.Open(); 
      ada.Fill(dt); 
     } 
     return dt; 
} 

現在奇怪的是第一個程序工作在同一PC完美運行,而第二個程序得到一個錯誤,說是沒有安裝ISAM在PC上。有什麼建議麼?

+0

你的bin目錄中是否有任何DLL?可能有一個名稱以Msexcl ##。dll或Mspdbe ##。dll之類的Ms開頭,如果有,而另一個沒有,請嘗試複製它。 – Dispersia

回答

7

儘管您的斷言他們都是一樣的,如果你仔細觀察他們不是。看看你的連接字符串...

計劃1

"... Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\" 

計劃2

"... Excel=8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\" 

應該有Excel 8.0沒有=在計劃2

+0

我現在感覺很蠢....感謝很多指出我完全錯過了... –

相關問題