JS实现Excel上传

最近做了一个上传Excel的功能,支持.xls .xlsx 

1、页面引入JS

<script src="/js/jquery-plugins/fineuploader-3.7.1/jquery.fineuploader-3.7.1.min.js"></script>  

2、 

<a id="uploader1" class="easyui-linkbutton" icon="icon-upload" plain="true" Onclick="uploadClick();" title="上传">上传</a> 

3、 定义uploadClick()方法调用后台代码。。。略

4、后台上传代码

        [System.Web.Http.HttpPost]
        public dynamic PostFile()
        {
            try
            {
                var context = HttpContext.Current;
                var request = context.Request;

                //保存文件
                var postFile = request.Files[0];
                string uploadPath = HttpContext.Current.Server.MapPath("~/Upload/");
                if (!Directory.Exists(uploadPath))
                    Directory.CreateDirectory(uploadPath);
                string filePath = postFile.FileName.Substring(postFile.FileName.LastIndexOf("\\") + 1);
                string fileType = filePath.Substring(filePath.LastIndexOf("."));
                filePath = filePath.Substring(0, filePath.LastIndexOf("."));
                filePath = uploadPath + filePath + DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond + fileType;
                request.Files[0].SaveAs(filePath);

                //读取文件
                var dt = new DataTable();
                var msg = ReadFile(filePath, ref dt);

                if (!string.IsNullOrEmpty(msg))
                {
                    throw new Exception(msg);
                }

                using (var db = Db.Context("Mms"))
                {
                    db.UseTransaction(true);
                    try
                    {
                        foreach (DataRow row in dt.Rows)
                        {
                            //忽略首行
                            if (row == dt.Rows[0])
                            {
                                continue;
                            }
                            var schedule = new CRM_Schedule();
                            schedule.ScheduleType = row[0].ToString();
                            schedule.HospID =int.Parse( row[1].ToString());
                            schedule.ScheduleDate = DateTime.Parse(row[2].ToString());
                            schedule.Rate = Double.Parse(row[3].ToString());

                            var ret = db.Sql("select 1 from CRM_Schedule where ScheduleType = @0 and HospID = @1 and ScheduleDate = @2 and Rate = @3", schedule.ScheduleType,schedule.HospID,schedule.ScheduleDate,schedule.Rate).QuerySingle<int>();
                            //忽略重复记录
                            if (ret <= 0)
                            {
                                db.Insert<CRM_Schedule>("CRM_Schedule", schedule).AutoMap(x => x.ScheduleID).Execute();
                            }
                        }

                        db.Commit();
                    }
                    catch (Exception ex)
                    {
                        db.Rollback();
                        throw ex;
                    }
                }
            }
            catch (Exception e)
            {
                return new { error = e.Message, preventRetry = true };
            }

            //返回前台
            return new { success = true, message = "导入成功!" };
        }

        //读取数据

        private string ReadFile(string filePath, ref DataTable dtSource)
        {
            string strCon = string.Empty;
            if (filePath.ToLower().IndexOf(".xlsx") > 0)
            {
                strCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES'", filePath);
            }
            else
            {
                strCon = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1'", filePath);
            }
            
            System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
            try
            {
                Conn.Open();
                var Sheet1 = "Sheet1";
                string sSheetName = "";

                if (String.IsNullOrEmpty(Sheet1))
                {
                    List<string> lstSheetNames = new List<string>();
                    DataTable dtSheets = new DataTable();
                    dtSheets = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { nullnullnull"Table" });
                    for (int i = 0; i < dtSheets.Rows.Count; i++)
                    {
                        if (!dtSheets.Rows[i]["TABLE_NAME"].ToString().Contains("_"))
                        {
                            lstSheetNames.Add(dtSheets.Rows[i]["TABLE_NAME"].ToString());
                        }
                    }
                    sSheetName = lstSheetNames[0];
                }
                else
                {
                    sSheetName = Sheet1 + "$";
                }

                DataSet ds = new DataSet();
                string strCom = String.Format("SELECT * FROM [{0}]", sSheetName);
                System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
                myCommand.Fill(ds, "ExcelTable");
                dtSource = ds.Tables[0];
            }
            catch (Exception e)
            {
                return "读取文件数据时出错:" + e.Message;
            }
            finally
            {
                Conn.Close();
                try
                {
                    FileInfo fi = new FileInfo(filePath); //删除临时文件
                    fi.Delete();
                }
                catch { }
            }
            return "";
        }

 

posted on 2015-10-30 14:50  内瑟斯  阅读(533)  评论(0)    收藏  举报

导航