2011-12-08 13 views
2

Excelファイルがあり、列に名前があります(データソースはクライアントによって制御されません)。列が変更されても、列ヘッダーは決して変更されません。ファイルでC#でExcelファイルから値を読み取る

は、私が同じ列内のすべてのセル内のデータにアクセスするにはどうすればよい

「ファーストネーム」と呼ばれていますか?私はマイクロソフトからこの例を見てみましょう

+0

ヘッズアップ:Excelの列に「ヘッダ」データベースの列名に類似していない - 彼らは彼らのテキストを「見出し」と普通の細胞です。したがって、ヘッダーを取得するには、最初の行のセルのテキストを読み取る必要があります。最初の行のセルをループして、目的のヘッダーテキストを持つセルを探します。次に、テキスト=列名のセルが見つかると、その下の列にデータが含まれていることがわかります – bernie2436

+0

Interop、OLE、other? –

答えて

4

Excelファイルをデータベースとして開きます。その後、列の位置について気にする必要はありません。

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\MyExcelFile.xls;Extended Properties=\"Excel 8.0;HDR=YES\""; 
using (var conn = new System.Data.OleDb.OleDbConnection(connString)) { 
    conn.Open(); 
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("Select * From [SheetName$]", conn); 
    OleDbDataReader reader = cmd.ExecuteReader(); 
    int firstNameOrdinal = reader.GetOrdinal("First Name"); 
    int lastNameOrdinal = reader.GetOrdinal("Last Name"); 
    while (reader.Read()) { 
     Console.WriteLine("First Name: {0}, Last Name: {1}", 
      reader.GetString(firstNameOrdinal), 
      reader.GetString(lastNameOrdinal)); 
    } 
} 
+0

ビルド構成を 'AnyCPU'から 'x86'に変更しなければならなかったが、これは私にとってはうまくいった。どうやらMicrosoft.Jet.OLEDB.4.0はx64を実行しているときは利用できません。 –

+0

残念ながら、Jetには64ビットインターフェイスがありません。 –

0

あなたはファイルに接続し、シートのコンテンツをダウンロードするためにODBCを使用します。ここで、このような何かを行うことができます。ここで

private bool DownloadExcelData(string fileName, ref DataTable informationDT) 
      { 
       // bool success 
       bool success = true; 

       // open the file via odbc 
       string connection = ConfigurationManager.ConnectionStrings["xls"].ConnectionString; 
       connection = String.Format(connection, FilePath + fileName); 
       OleDbConnection conn = new OleDbConnection(connection); 
       conn.Open(); 

       try 
       { 
        // retrieve the records from the first page 
        OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Information$]", conn); 
        OleDbDataAdapter adpt = new OleDbDataAdapter(cmd); 
        adpt.Fill(informationDT); 
       } 
       catch { success = false; } 

       // close the connection 
       conn.Close(); 
       return success; 
      } 

のxlsとのxlsxファイルのためのいくつかのサンプルODBC接続は、次のとおりです。

<add name="xls" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;'" /> 
    <add name="xlsx" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0" /> 
0

私は過去にExcelファイルを読むためにFileHelpers Libraryを成功裏に使用しています。

0

私はこれまでにexcelLibraryを使用しており、非常に使いやすいことがわかりました。

関連する問題