最近在做xls文件上传。这里我写了一个类
public static DataSet ExcelToDS2(string Path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
conn.Open();
System.Data.OleDb.OleDbDataAdapter myCommand = null;
DataSet ds = null;
System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = schemaTable.Rows[0][2].ToString().Trim(); //获取 Excel 的表名,默认值是sheet1
string strExcel = "select * from [" + tableName + "]";
myCommand = new System.Data.OleDb.OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1");
conn.Close();
return ds;
}
方法参数,直接传的是本地的xls文件路径
在asp.net中上传时,发现只有IE 可以得到具体的物理路径, firefox和谷歌 上传得到的FileName=文件名.xls;
所以后来为了读取xls中的数据
第一把xls文件保存下来,读取数据后在进行删除
HttpPostedFileBase fileUpload = cb.Request.Files[0];
string savename = string.Empty;
string UserId = new UserManage().GetUserId();
if (fileUpload == null)
return;
string filename = fileUpload.FileName;
string fileExtension = System.IO.Path.GetExtension(filename);
if (!(fileExtension.Equals(".xls") || fileExtension.Equals(".XLS") || fileExtension.Equals(".xlsx") || fileExtension.Equals(".XLSX")))
return;
string path = cb.Server.MapPath("~/Content/File/TempFiles/");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
savename = path + "unity" + ".xls";
fileUpload.SaveAs(savename);
// savename为路径
通过路径去调用 上述方法;
//删除
if (File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + savename))
File.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + savename);