2013-06-04 3 views
1

У меня есть следующий код, который я использую для чтения листа excel. В книгах, которые будут использовать этот код, будет только один лист. Имена листов могут измениться, но я просто хочу иметь возможность читать первый лист по умолчанию независимо от имени. Если возможно, как это можно достичь?Чтение 1-го листа 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

Мой сниппет, в том числе более тщательной обработке ресы:

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

Спасибо, Юлия за вашу помощь. –

Смежные вопросы