//导入excel文件
protected void ImportExcel_Click(object sender, EventArgs e)
{
string getErrorMsg = "";
//FileUpload1是asp.net里文件上传控件的id,加在前台页面
if (!FileUpload1.HasFile)
{
Response.Write("<script>alert('请选择你要导入的Excel文件');</script>");
return;
}
//获取文件的后缀名
string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName);
if (fileExt != ".xls")
{
Response.Write("<script>alert('文件类型错误!');</script>");
return;
}
//这里后面要适配xlsx
string fileName = FileUpload1.PostedFile.FileName;
FileUpload1.PostedFile.SaveAs(Server.MapPath("PostedFiles/" + fileName));
//这个适配语句是适合excel2007版本以下的
string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";Data Source=" + Server.MapPath("PostedFiles/" + fileName);
//下面这个是针对2007及以上的
//string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
DataSet ds = new DataSet();
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
DataTable sheetsNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
//得到所有sheet的名字
string firstSheetName = sheetsNames.Rows[0][2].ToString();
//得到第一个sheet的名字
string sql = string.Format("SELECT * FROM [{0}]", firstSheetName);
OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
ada.Fill(ds);
}
}
几个注意点:
1: 报错“外部表不是预期的格式。”
问题原因:
这个excel文件可能是你自己用程序导出的(等会儿有空写下导出excel文件),
用记事本打开你的excel文件,
若是html代码,则表示你的excel文件格式不是标准的excel格式,才会提示“外部表不是预期的格式”的错误;
若是乱码,则可以成功导入。
解决方法:
(1)新建一个excel,往里写数据
(2) 用EXCEL另存为功能另存成标准格式XLS格式(Response导出的其实是网页文件)
2.对从文件中取出来的dataset进行操作(比如存进数据库)
报错“无法找到表 0”
问题原因:
(1)可能是ds里就没有成功读到东西,当然ds.Tables[0]也就会出错
(2)如果是从本地上传excel到服务端,服务端不能直接读到客户端的那个文件,检查是否在服务端save成功了。
如果还有问题不能解决或有疑问,请留言~尽快会回复
来源:oschina
链接:https://my.oschina.net/u/2586209/blog/716940