2013-06-04 2 views
1

Excel 시트를 읽는 데 다음 코드를 사용하고 있습니다. 이 코드를 사용하게 될 통합 문서는 하나의 시트 만 가질 것입니다. 시트 이름은 바뀔 수 있지만 이름이 무엇이든 기본적으로 첫 번째 시트를 읽을 수 있기를 원합니다. 가능한 경우 어떻게 달성 할 수 있습니까? 기본적으로 통합 문서의 첫 번째 Excel 시트 읽기

if (fileName != string.Empty) 
        { 
         string connString = ""; 
         System.Data.DataTable dt = new System.Data.DataTable(); 

         // Initialize connection string 
         connString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES\"", fileName); 

         // Connect 
         OleDbConnection myConnection = new OleDbConnection(connString); 

         // Open connection if closed 
         if (myConnection.State != ConnectionState.Open) 
          myConnection.Open(); 

         string sql = "SELECT * from [INTKEAP_INV_DST_48$]"; 

         OleDbCommand cmd = new OleDbCommand(sql, myConnection); 
         cmd.CommandType = CommandType.Text; 

         OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 

         adapter.Fill(dt); 

......... 어떤 도움에 감사드립니다. 더 조심 resouces 처리를 포함

+0

나는 [ClosedXML] (https://closedxml.codeplex.com/) 사용하는 것이 좋습니다. 확실히 다루기가 더 쉽습니다. – Nolonar

답변

2

내 조각 :

const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FILENAME>;Extended Properties=\"Excel 8.0;HDR=no;\";"; 
OleDbConnection objConnection = new OleDbConnection(CONNECTION_STRING.Replace("<FILENAME>", fullFileName)); 
DataSet dsImport = new DataSet();  
try 
{ 
    objConnection.Open(); 
    DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
    if((null != dtSchema) && (dtSchema.Rows.Count > 0)) 
    { 
     string firstSheetName == dtSchema.Rows[0]["TABLE_NAME"].ToString(); 
     new OleDbDataAdapter("SELECT * FROM [" + firstSheetName + "]", objConnection).Fill(dsImport); 
    } 
    catch 
    { 
     throw; 
    } 
    finally 
    { 
     // Clean up. 
     if(objConnection != null) 
     { 
     objConnection.Close(); 
      objConnection.Dispose(); 
     } 
    } 
return (dsImport.Tables.Count > 0) ? dsImport.Tables[0] : null; 
+0

도움을 주신 Yulia에게 감사드립니다. –

관련 문제