2010-03-12 24 views
7

Nel seguente codice invece di specificare il nome della scheda .. Esiste comunque la possibilità di dire "seleziona * da [tab1]"? che cosa mai il nome della scheda potrebbe essere ..Lettura da excel utilizzando il comando oledb

OleDbCommand excelOledbCommand = 
          new OleDbCommand("Select * From [Sheet1$]", excelOledbCon); 
+0

Cosa * esattamente * Sei desiderio provare? –

+2

leggere i dati da Excel utilizzando C# –

+0

Sì, ma qual è il problema con il nome del foglio? –

risposta

16

Questo potrebbe aiutare

Tips for reading Excel spreadsheets using ADO.NET

OleDbConnection.GetOleDbSchemaTable Method

Qualcosa di simile

OleDbConnection dbConnection = new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\BAR.XLS;Extended Properties=""Excel 8.0;HDR=Yes;"""); 
dbConnection.Open(); 
try 
{ 
    // Get the name of the first worksheet: 
    DataTable dbSchema = dbConnection.GetOleDbSchemaTable (OleDbSchemaGuid.Tables, null); 
    if (dbSchema == null || dbSchema.Rows.Count < 1) 
    { 
     throw new Exception ("Error: Could not determine the name of the first worksheet."); 
    } 
    string firstSheetName = dbSchema.Rows [0] ["TABLE_NAME"].ToString(); 

    // Now we have the table name; proceed as before: 
    OleDbCommand dbCommand = new OleDbCommand ("SELECT * FROM [" + firstSheetName + "]", dbConnection); 
    OleDbDataReader dbReader = dbCommand.ExecuteReader(); 

    // And so on... 
} 
finally 
{ 
    dbConnection.Close(); 
} 
+0

possiamo leggerlo senza nome di foglio come l'indice del foglio ?? – Prageeth

+0

@Adriaan Stander possiamo leggerlo senza nome di fogli come l'indice del foglio ?? – daniele3004

2
public DataSet GetDataSetFromFile() 
{ 
    string strFileName = _FilePath; 
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;"; 
    strConn += "Data Source= " + strFileName + "; Extended Properties='Excel 8.0;HDR=No;IMEX=1'"; 
    OleDbConnection ObjConn = new OleDbConnection(strConn); 
    ObjConn.Open(); 
    string strSheetName = getSheetName(ObjConn); 
    OleDbCommand ObjCmd = new OleDbCommand("SELECT * FROM [" + strSheetName + "]", ObjConn); 
    OleDbDataAdapter objDA = new OleDbDataAdapter(); 
    objDA.SelectCommand = ObjCmd; 
    DataSet ObjDataSet = new DataSet(); 
    objDA.Fill(ObjDataSet); 
    ObjConn.Close(); 
    return ObjDataSet; 
} 

private string getSheetName(OleDbConnection ObjConn) 
{ 
    string strSheetName = String.Empty; 
    try 
    { 
     System.Data.DataTable dtSheetNames = ObjConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     if (dtSheetNames.Rows.Count > 0) 
     { 
      strSheetName = dtSheetNames.Rows[0]["TABLE_NAME"].ToString(); 
     } 
     return strSheetName; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception("Failed to get the sheet name", ex); 
    } 
} 
Problemi correlati