【.net MVC】 EXCEL 导入

Excel导入

首先是前端页面

导入首先需要选择文件,这时会出现第一个易错问题:不同的浏览器保护机制,会将选择文件的路径进行保护,类似”C:\\fakepath\\文件名“,这样的文件路径肯定是不能获取正确的文件进行操作。

当然也有一些骚操作进行规避,比如:

1.调整浏览器的浏览器安全设置(亲测费神费力不见得好用,不同电脑使用你得疯)。

2.修改文件夹路径(这个咋说呢,真是个小机灵鬼--直接将保护路径设置成要导入的文件路径)

3.上代码(好用、通用)

HTML

导入  

一个按钮和一个文件输入框。

JS

    function select_file() {
      $("#file").trigger("click");
    }
    function fileUpload() {
        if (IsNullOrEmpty($('#file')[0].files[0]))//IsNullOrEmpty 这个方法自己写的  具体的自己判断下
            return false;
        // 创建formdata对象
        var formData = new FormData();
        // 给formData对象添加标签,注意与input标签的ID一致
        formData.append('file', $('#file')[0].files[0]);
        $.ajax({
            url: "/**/***", //这里写你的url
            type: 'POST',
            data: formData,
            contentType: false, // 当有文件要上传时,此项是必须的,否则后台无法识别文件流的起始位置
            processData: false, // 是否序列化data属性,默认true(注意:false时type必须是post)
            dataType: 'json', //这里是返回类型,一般是json,text等
            clearForm: true, //提交后是否清空表单数据
            success: function (data) {   //提交成功后自动执行的处理函数,参数data就是服务器返回的数据。              
                //成功后自己业务操作 比如加载什么的
            },
            error: function (data, status, e) {  //提交失败自动执行的处理函数。
                console.error(e);
            }
        });
        $('#file').val(null);
    }

获取文件路径搞定了,接下来将获取到的文件保存到服务器上,再然后将服务器上文件导入系统进行业务上的需求操作。

public ActionResult onloadFile() //导入文件
        {
            string retStr = "上传成功";
            int retCode = 1;
            HttpRequest request = System.Web.HttpContext.Current.Request;
            HttpFileCollection FileCollect = request.Files;
          
            string path = "";//文件的完整路径
            //文件保存目录路径
            string imgPathName = DateTime.Now.ToString("yyyyMMdd");//以日期为文件存放的上层文件夹名
            string savePath = "upload\\file\\" + imgPathName + "\\";//文件存放的完整路径
            savePath = Server.MapPath("~\\") + savePath;
            if (!Directory.Exists(savePath))                                                      //定义允许上传的文件扩展名
            {
                Directory.CreateDirectory(savePath);
            }
            Hashtable extTable = new Hashtable();
            extTable.Add("file", "xls,xlsx");
            if (FileCollect.Count > 0)//如果集合的数量大于0,多文件上传情况 
            {
                HttpPostedFile imgFile = FileCollect[0];//用key获取单个文件对HttpPostedFile 
                string fileName = imgFile.FileName;//获取文件名
                string fileExt = Path.GetExtension(fileName).ToLower();//获取文件后缀名
                //判断文件类型是否正确
                //判断是否为IE浏览器的文件名
                int unixSep = fileName.LastIndexOf('/');
                int winSep = fileName.LastIndexOf('\\');
                int pos = (winSep > unixSep ? winSep : unixSep);
                if (pos != -1) 
                    fileName = fileName.Substring(pos + 1);
                if (Array.IndexOf(((string)extTable["file"]).Split(','), fileExt.Substring(1).ToLower()) == -1)
                {
                    retStr = "文件类型不正确";
                    retCode = 2;
                }
                else
                {
                    string imgPath = savePath + fileName;//构造文件保存路径 
                    imgFile.SaveAs(imgPath);//将上传的东西保存 
                    path = imgPath;
                    //调用NPOI 方法对Excel进行处理
                    DataTable dt = new DataTable();
                    if(fileName.EndsWith("xls"))
                        dt = NPOIExcelHelper.Import(path);
                    else if (fileName.EndsWith("xlsx"))
                        dt = NPOIExcelHelper.ImportFxlsx(path);
                    
                   //将获取到的数据dt进行操作
                   //。。。。。。
                }
            }
            var ret = new { code = retCode, message = retStr };
            string jsonStr = JsonConvert.SerializeObject(ret);
            return Content(jsonStr);
        }

后台这边使用了NPOI 对EXCEL文件进行读写操作,详情就懒得写了,后台这边处理的根据自己需求来,主要是个思路。

留下个痕迹方便以后走弯路的时候回头看看。

你可能感兴趣的:(.net,mvc,excel)