2017-07-03 5 views
2

誰かが私を助けることができれば非常に感謝します。私は別のシート(ヘッダーは固定されていません)を持つExcel(.xlsx、Excel 2007)を読み込もうとしています。以下のコードはほとんどの場合私には役に立ちますが、いくつかのケースでは例外がスローされます。C#の例外:外部テーブルが期待どおりの形式ではありません。使用している間にoledbとexcel

 public static bool ReadExcelData(string ExcelFilePath, string SheetName, out DataTable dt) 
     { 
      dt = new DataTable(); 

      bool isXlsx = ExcelFilePath.Substring(ExcelFilePath.LastIndexOf('.') + 1).ToLower() == "xlsx"; 
      string excelConnectString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + ExcelFilePath + ";Extended Properties=\"Excel 8.0;HDR=yes;\""; 
      if (isXlsx) 
       excelConnectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFilePath + ";Extended Properties=\"Excel 12.0\";"; 

      OleDbConnection objConn = null; 
      try 
      { 
       objConn = new OleDbConnection(excelConnectString); 
       if (objConn.State == ConnectionState.Closed) 
       { 
        objConn.Open(); 
        dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       } 
      } 
      catch (Exception ex) 
      { 
       dt = null; 
       return false; 
      } 

      try 
      { 
       dt.Clear(); 
       string query = "select * from ["+SheetName+"$] ";     
       OleDbCommand objCmd = new OleDbCommand(query, objConn); 
       OleDbDataAdapter objDatAdap = new OleDbDataAdapter(); 
       objDatAdap.SelectCommand = objCmd; 

       objDatAdap.Fill(dt); 
       Boolean result = (dt.Rows.Count >= 1) ? true : false; 
       objConn.Close(); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       dt = null; 
       return false; 
      } 

     } 

例外の場合には、私は(その上、それはエラーを与えている)を手動でコードに行く前に(エクセルをダブルクリック)このエクセルを開く、場合、それはすべての例外を生成しない、ということを読み込みますスムーズに優れています。

すべてのケースでうまくいくように、より良い方法または代替方法がありますか?

+1

有効なExcelファイルと、そうでないExcelファイルを提供できますか? –

+0

と例外メッセージが役に立つでしょう – Vladimir

+0

@Vladimir、例外は - 「外部テーブルが期待されたフォーマットではありません」 –

答えて

0

問題はあなたのコードではなく、Excelシートに保存してください。Excelシートを.xlsまたは.xlsx形式で保存してから、同じコードを使用してください。それが動作します。

関連する問題