【.net MVC】 EXCEL 导入

Excel导入

首先是前端页面

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

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

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

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

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

HTML

html 复制代码
<a  class="easyui-linkbutton" onclick="select_file()" iconCls="icon-excel">导入</a>  
<input type="file" name="file" id="file" onchange="fileUpload();return false;" style="display:none"/>

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

JS

javascript 复制代码
    function select_file() {
      $("#file").trigger("click");
    }
    function fileUpload() {
        if (IsNullOrEmpty($('#file')[0].files[0]))//IsNullOrEmpty 这个方法自己写的  具体的自己判断下
            return false;
        // 创建formdata对象
        var formData = new FormData();
        // 给formData对象添加<input>标签,注意与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);
    }

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

cs 复制代码
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文件进行读写操作,详情就懒得写了,后台这边处理的根据自己需求来,主要是个思路。

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

相关推荐
唐青枫13 小时前
别把 Razor 当成几段 HTML:C#.NET Razor Pages、MVC 视图与实战详解
c#·.net
E-iceblue15 小时前
Excel 列转行/行列转换全指南:从 4 种常见解法到 Python 批量自动化
python·excel·python库·spire.xls
宝桥南山19 小时前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
Data-Miner20 小时前
AI处理数据的脚本复用与逻辑复用有什么区别?哪种方式更能沉淀工作成果
数据分析·excel
wang_shu_mo_ran21 小时前
Spring MVC的常用注解和用法(一)
java·spring·mvc
Lost of 程序猿1 天前
.NET 10 船端单机部署与离线升级实战:从闪退事故到无感回滚
c#·asp.net·.net
福兮说1 天前
在浏览器里写一个“够用就好“的 Excel 公式求值器
前端·javascript·excel·编译原理
慧都小妮子1 天前
Word/Excel/PPT 如何稳定导出 Markdown?文档 SDK 三线能力拆解
.net·markdown·知识库·aspose·rag·文档转换·文档互操作
唐青枫2 天前
对象到底住在哪里?C#.NET 托管堆从分配、GC 到内存排查
c#·.net
慧都小妮子2 天前
标签打印如何减少手工抄数?用Bartender 直连 Excel 批量打印
excel·bartender·条码打印·标签打印软件·数据驱动打印·工业打印机