2017-04-11 10 views
0

Excel 2016からC#windowsアプリケーションを読み込みたいアプリケーションで作業しています。私が書いたコード(コードについては以下を参照)は、Excelファイルが開いているときにうまく動作します。しかし、Excelファイルが開かれていないときにコードを実行すると、OleDbexceptionがスローされます。「外部表は期待された形式ではありません。Excel 2016からC#Windowsアプリケーションまでのデータの読み出し

using System.Data.OleDb; 
using System; 

namespace ExcelRead 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\Practice.xlsx';Extended Properties='Excel 8.0;HDR=Yes;'"); 
     con.Open(); 
     OleDbCommand cmd = new OleDbCommand("select * from [sheet1$];", con); 
     OleDbDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      Console.WriteLine(dr.GetString(0) + "\t" + dr.GetString(1) + "\t" + dr.GetString(2)); 
     } 
     Console.ReadKey(); 
    } 
    } 
} 

答えて

0

エラーが発生しているExcelシートのインスタンスとして生成される接続を維持していないため、以下のコードを使用してください。

static void Main(string[] args) 
    { 
      // Create Connection to Excel Workbook 
      using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\Practice.xlsx';Extended Properties='Excel 8.0;HDR=Yes;'")) 
      { 
       OleDbCommand command = new OleDbCommand("Select * FROM [Sheet1$]", connection); 
       connection.Open(); 
       // Create DbDataReader to Data Worksheet 
       using (OleDbDataReader dr = command.ExecuteReader()) 
       { 
        Console.WriteLine(dr.GetString(0) + "\t" + dr.GetString(1) + "\t" + dr.GetString(2)); 
       } 
      } 
     Console.ReadKey(); 
    } 
+0

それでも同じ例外がスローされます。 –

+0

@Ashis、接続文字列に "IMEX = 1"を使用してください。 –

関連する問題