c#使用ole db导入excel文件

public static DataTable GetExcelDataTable(string filePath, string sheetName)
{
//filePath为文件路径,sheetName为要访问的sheet的名字,注意带$符号,比如sheet名字为Test,那么sheetName就是Test加上一个美元符号
//HDR代表是否第一行作为标题行,如果是的话,那么第一行就不会被读取。ole db读取excel有一个弊端,ode db有一个默认机制,他会根据前八行的数据来判断某列的数据类型,
//这样会导致有些时候列值会莫名其妙的丢失,比如某列是字符串类型,但是值都是日期格式,他会默认为是日期类型,字符串的值在这列会丢失,并且表头也会无法读取。
string strConn = “Provider=Microsoft.Ace.OleDb.12.0;Data Source=” + filePath + “;Extended Properties=‘Excel 12.0 Xml;HDR=NO;IMEX=1’”;
DataTable dt = null;
try
{
using (OleDbConnection oleConnection = new OleDbConnection(strConn))
{
oleConnection.Open();
string query = string.Format("SELECT * FROM [{0}] ", sheetName);
OleDbCommand oldCmd = new OleDbCommand(query, oleConnection);
DataSet ds = new DataSet();
OleDbDataAdapter oleAdapter = new OleDbDataAdapter
{
SelectCommand = oldCmd
};
oleAdapter.Fill(ds);
dt = ds.Tables[0];
DataRow drHeader = dt.Rows[0];
for (int i = 0; i < dt.Columns.Count; i++)
{
DataColumn dc = dt.Columns[i];
if (!string.IsNullOrWhiteSpace(drHeader[i].ToString()))
{
dc.ColumnName = drHeader[i].ToString();
}
else
{
dt.Columns.Remove(dc);
i–;
}
}
dt.Rows.RemoveAt(0);
oleConnection.Close();
}
}
catch (OleDbException e)
{
throw e;
}
catch (Exception ex)
{
logger.Error(ex);
}
return dt;
}
遍历foreach (DataRow dr in dt.Rows){}即可获得每一行的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值