通过fileupload获取选中excel数据,并转换为datatable 类型
try
{
string path = "";
string FilePath = System.Web.HttpContext.Current.Server.MapPath("~/");
FilePath += "excel\\";
string Extension = System.IO.Path.GetExtension(file.PostedFile.FileName).ToLower();
if (Extension == ".xls" || Extension == ".xlsx")
{
Random ran = new Random();
string iran = ran.Next(100000000, 1000000000).ToString();
string NewFilePath = DateTime.Now.ToString("yyyyMMddHHmmssfff") + iran + Extension;
file.SaveAs(FilePath + NewFilePath);
path = FilePath + NewFilePath;
}
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
//获取excel数据
DataTable dt1 = new DataTable("exceltable");
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable dt = conn.GetSchema("TABLES");
if (dt.Rows.Count > 0)
{
string selSqlStr = string.Format("select * from [{0}]", dt.Rows[0]["TABLE_NAME"]);
OleDbDataAdapter oleDa = new OleDbDataAdapter(selSqlStr, conn);
oleDa.Fill(dt1);
}
conn.Close();
return dt1;
}
catch
{
return null;
}
数据链接:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'
随电脑不同而变。
HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名。
IMEX=1 解决数字与字符混合时,识别不正常的情况。
因为不同的模式代表著不同的读写行为:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途”