2013-06-04 26 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); 

......... 任何幫助表示讚賞。

+0

我建議使用[ClosedXML(https://closedxml.codeplex.com/)。處理起來肯定更容易。 – Nolonar

回答

2

我的片段,其中包括更加小心resouces處理:

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的幫助。 –

相關問題