C#读取Excel显示到repeater中

首先需要一个用来存储我们需要显示的内容,防止页面回发丢失(添加时使用)

#region 缓存文件

        private DataTable excelData;

        /// <summary>
        /// 缓存已经读取过的Datatable
        /// </summary>
        public DataTable ExcelData
        {
            get
            {
                if (ViewState["mydata"] != null)
                {
                    excelData = (DataTable)ViewState["mydata"];
                }
                return excelData;
            }
            set
            {
                ViewState["mydata"] = value;
            }
        }

        #endregion

 接下来检查上传文件

 /// <summary>
        /// 检查文件上传
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public string CheckFile(string fileName)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                return "Please ensure that you upload file exists!";
            }
            if (!fileName.ToLower().EndsWith(".xls") && !fileName.ToLower().EndsWith(".xlsx"))
            {
                return "You select the file format is not correct, please try again!";
            }
            if (fileName.IndexOf(".") <= 0)
            {
                return "Please select a file to upload!";
            }
            return "";
        }

 

 /// <summary>
        /// 连接Excel,并读取数据源
        /// </summary>
        /// <param name="filepath">数据源路径</param>
        /// <returns>Excel文件的工作薄里的数据</returns>
        public DataSet connExcel(string filepath)
        {
            if (!string.IsNullOrEmpty(filepath))
            {
                try
                {
                    string connstring = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filepath + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
                    OleDbConnection objconn = new OleDbConnection(connstring);
                    objconn.Open();
                    DataTable dt = objconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "table" });
                    string sheetname = "Sheet1$";
                    sheetname = dt.Rows[0]["TABLE_NAME"].ToString();
                    objconn.Close();
                    string strsql = "select * from [" + sheetname + "]";
                    DataSet ds = new DataSet();
                    OleDbDataAdapter adp = new OleDbDataAdapter(strsql, objconn);
                    adp.Fill(ds);
                    return ds;
                }
                catch (Exception ex)
                {
                    throw new Exception("Occurs when a data source connection:" + ex.Message);
                }
            }
            else
            {
                throw new Exception("File does not exist!");
            }
        }

 

 /// <summary>
        /// 读取Excel
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private DataTable readExcel(string path)
        {
            DataTable dt = new DataTable("myTestTable");
            dt.Columns.Add("ID");
            dt.Columns.Add("Name");
            dt.Columns.Add("Sex");
            DataView dv = new DataView(dt);
            DataSet ds = connExcel(path);
            return ds.Tables[0];
        }

 

/// <summary>
        /// 上传文件的方法
        /// </summary>
        /// <returns></returns>
        [ScriptMethod]
        private void PreviewData()
        {
            //获取文件名
            string fileName = Path.GetFileName(this.fileSave.PostedFile.FileName);
            //检索文件
            string message = CheckFile(fileName);
            if (!string.IsNullOrEmpty(message))
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "ok", "alert('" + message + "')", true);
                return;
            }
            try
            {
                string path = Server.MapPath("/MyTest/ExcelData/");
                //文件是否存在,如果不存在则创建
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                //定义文件的随机数
                Random rand = new Random();
                path += rand.Next(0, 9999999) + DateTime.Now.Hour + DateTime.Now.Minute + fileName;
                //上传文件
                this.fileSave.PostedFile.SaveAs(path);
                //将数据内容保存到缓存中
                ExcelData = this.readExcel(path);
                this.rptData.Visible = true;
                this.rptData.DataSource = ExcelData;
                this.rptData.DataBind();
            }
            catch (Exception ex)
            {
                throw ex;
                //Page.ClientScript.RegisterStartupScript(this.GetType(), "no", "alert('" + ex.Message + "')", true);
            }
        }

 

posted @ 2015-04-02 17:16  临冰听雪丶  阅读(259)  评论(0编辑  收藏  举报