ASP.NET 导入 Excel

 

        //导入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成功了。

 

如果还有问题不能解决或有疑问,请留言~尽快会回复

转载于:https://my.oschina.net/zmixed/blog/716940

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值