我正在使用OLEDB
对象来读取Excel文件并在数据表中返回数据。以下Excel工作表有两列导入,但我想用我的数据读取Excel行号。
这是我用来阅读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子句来返回来自不同行号的数据(其中应用递增的行号可能会失败)?
答案 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++;
}
}