使用OLEDB Object从Excel工作表中读取行号

时间:2015-09-12 05:52:19

标签: c# asp.net .net excel oledb

我正在使用OLEDB对象来读取Excel文件并在数据表中返回数据。以下Excel工作表有两列导入,但我想用我的数据读取Excel行号。

enter image description here

这是我用来阅读Excel文件的代码:

private DataTable ImportExcel2007(String strFilePath)
{
    if (!File.Exists(strFilePath)) return false;
    String strExcelConn = "Provider=Microsoft.ACE.OLEDB.12.0;"
    + "Data Source=" + strFilePath + ";"
    + "Extended Properties='Excel 8.0;HDR=Yes'";
    OleDbConnection connExcel = new OleDbConnection(strExcelConn);
    OleDbCommand cmdExcel = new OleDbCommand();
    try
    {
        cmdExcel.Connection = connExcel;

        //Check if the Sheet Exists
        connExcel.Open();
        DataTable dtExcelSchema;
        //Get the Schema of the WorkBook
        dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        connExcel.Close();

        //Read Data from Sheet1
        connExcel.Open();
        OleDbDataAdapter da = new OleDbDataAdapter();
        DataSet ds = new DataSet();
        string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
        cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";

        //Range Query
        //cmdExcel.CommandText = "SELECT * From [" + SheetName + "A3:B5]";

        da.SelectCommand = cmdExcel;
        da.Fill(ds);
        connExcel.Close();
        return ds.Table[0];
    }
    catch
    {
        return null;
    }
    finally
    {
        cmdExcel.Dispose();
        connExcel.Dispose();
    }
}

我可以通过数据表中的新列以递增的数字来管理它,但是我可以应用带有SELECT语句的WHERE子句来返回来自不同行号的数据(其中应用递增的行号可能会失败)?

1 个答案:

答案 0 :(得分:0)

不幸的是,OLEDB不允许您根据行号进行选择。你可以使用这样的东西:

int rowNum = 0;
foreach (DataTable dt in ds.Tables)
{
    dt.Columns.Add("RowNum",typeof(Int32));
    rowNum = 1;
    foreach (DataRow dr in dt.Rows)
    {
        dr["RowNum"] = rowNum++;
    }
}