2014-10-10 3 views
1

지금까지 전체 Excel 파일의 열 이름을 가져 왔지만 Excel 파일의 열 이름을 가져 오려면 어떻게해야합니까? 주어진 테이블 (시트)의. 이를 달성하기 위해 어떻게 코드를 수정할 수 있습니까? 나는 긍정적 인 결과없이 잠시 동안 노력해 왔으며, 많은 도움을 주셨습니다.OleDbConnection과 함께 C#을 사용하여 특정 시트의 Excel 파일에서 열 이름 가져 오기

public static List<String> ReadSpecificTableColumns(string filePath, string sheetName) 
    { 
     var columnList = new List<string>(); 
     try 
     { 
      var excelConnection = new OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties='Excel 12.0;IMEX=1'"); 
      excelConnection.Open(); 
      var columns = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null); 
      excelConnection.Close(); 

      if (columns != null) 
      { 
       columnList.AddRange(from DataRow column in columns.Rows select column["Column_name"].ToString()); 
      } 

     } 
     catch (Exception exception) 
     { 
      Console.WriteLine(exception.Message); 
     } 

     return columnList; 
    } 

답변

1

코드에 시트 이름을 포함하지 않았습니다.

var adapter = new OleDbDataAdapter("SELECT * FROM [" +sheetName + "$]", excelConnection); 
var ds = new DataSet(); 
adapter.Fill(ds, "myTable"); 
DataTable data = ds.Tables["myTable"]; 

foreach(DataColumn dc in data.Columns){ 
... 
} 
+0

을하지만,이 방법으로 코드는 지정된 시트의 모든 행을 읽고이를 방지하려고합니다. 모든 데이터를 읽지 않고 5 세트의 열 이름을 가져올 수있는 파일이 5 개 포함 된 아이디어가 있습니다. 세트 중 하나에서 키워드를 찾으면 키워드가있는 시트의 내용을 읽습니다. – user2881691

+0

당신 맞아요하지만 당신의 접근 방식을 봤는데 비슷한 결과를 찾지 못했습니다 –

+0

네, 지금 당분간 찾고있었습니다. 어쩌면 적용 할 수 없습니다. 시간과 노력에 감사드립니다 :) – user2881691

0

당신은 같은 것을 수행 할 수 있습니다 :
당신은 코드 아래에 시도 할 수 있습니다 내가 (내가 여기에 게시하지 않은 경우) 당신과 유사한 코드를 사용하고있다

private void ValidateExcelColumns(string filePath) 
    {    
     var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;IMEX=1;HDR=Yes;TypeGuessRows=0;ImportMixedTypes=Text\""; ; 
     using (var conn = new OleDbConnection(connectionString)) 
     { 
      conn.Open(); 

      DataTable dt = new DataTable(); 
      var sheets = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
      using (var cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = "SELECT TOP 1 * FROM [" + sheets.Rows[0]["TABLE_NAME"].ToString() + "] "; 
       var adapter = new OleDbDataAdapter(cmd); 
       adapter.Fill(dt); 
      } 

      foreach(DataColumn column in dt.Columns) 
      { 
       //Do something with your columns 
      } 
     } 
    }