使用oledbcommand从excel读取

时间:2010-03-12 00:30:12

标签: c# excel

在下面的代码中,而不是指定选项卡名称..无论如何我们只能说“select * from [tab1]”?选项卡名称可能是什么..

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

2 个答案:

答案 0 :(得分:16)

这可能会有所帮助

Tips for reading Excel spreadsheets using ADO.NET

OleDbConnection.GetOleDbSchemaTable Method

这样的东西
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 ();
}

答案 1 :(得分: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);
    }
}