【.net MVC】 EXCEL 导入

Excel导入

首先是前端页面

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

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

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

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

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

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

    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: "/**/***", //这里写你的urltype: '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文件进行读写操作,详情就懒得写了,后台这边处理的根据自己需求来,主要是个思路。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、攻防世界第一天

1、网站目录下会有一个robots.txt文件&#xff0c;规定爬虫可以/不可以爬取的网站。 2、URL编码细则&#xff1a;URL栏中字符若出现非ASCII字符&#xff0c;则对其进行URL编码&#xff0c;浏览器将该请求发给服务端&#xff1b;服务端会可能会先对收到的url进行解码&#xff0…

深度解读波卡 2.0:多核、更有韧性、以应用为中心

本文基于 Polkadot 生态研究院整理&#xff0c;有所删节 随着波卡 1.0 的正式实现&#xff0c;波卡于 6 月 28 日至 29 日在哥本哈根举办了年度最重要的会议 Polkadot Decoded 2023&#xff0c;吸引了来自全球的行业专家、开发者和爱好者&#xff0c;共同探讨和分享波卡生态的…

ByteV“智农”平台--数字乡村可视化

“智农”平台基于自主可控的数字孪生技术、物联网技术、大数据技术&#xff0c;构建全流程的新型农业一体化管理平台&#xff0c;围绕产运销管理全流程&#xff0c;实现生产->存储->包装->运输->销售的全链条管理。融合农业数据管理、农业数据预警显示、多维数据综…

达梦数据库8用户管理以及忘记sysdba密码修改办法

达梦数据库8用户管理&达梦数据库v8忘记sysdba密码&#xff0c;修改办法。 达梦数据库8用户管理1.创建用户的语法:2.锁定/解锁用户3.修改用户的密码&#xff08;同样要符合密码策略PWD_POLICY&#xff09;4.修改用户默认表空间5.删除用户6.同样地可以使用DM管理工具进行创建…

【工具】 删除Chrome安装的“创建快捷方式”

创建Chrome的快捷方式&#xff0c;可以放在桌面&#xff0c;想用时双击就可以打开网页&#xff0c;比书签&#xff08;brookmark&#xff09;结构化管理更方便。 但是&#xff0c;安装一时爽&#xff0c;卸载有问题。 如果用 windows 控制面板\所有控制面板项\程序和功能 卸载…

Facebook 应用未启用:这款应用目前无法使用,应用开发者已得知这个问题。

错误&#xff1a;Facebook 应用未启用:这款应用目前无法使用&#xff0c;应用开发者已得知这个问题。应用重新启用后&#xff0c;你便能登录。 「应用未经过审核或未发布」&#xff1a; 如果一个应用还没有经过Facebook的审核或者开发者尚未将应用发布&#xff0c;那么它将无法…

java学习004

常用数据结构对应 php中常用的数据结构是Array数组&#xff0c;相对的在java开发中常用的数据结构是ArrayList和HashMap&#xff0c;它们可以看成是array的拆分&#xff0c;一种简单的对应关系为 PHPJAVAArray: array(1,2,3)ArrayListlArray: array(“name” > “jack”,“…

BC99 序列中整数去重

描述 输入n个整数的序列&#xff0c;要求对这个序列进行去重操作。所谓去重&#xff0c;是指对这个序列中每个重复出现的整数&#xff0c;只保留该数第一次出现的位置&#xff0c;删除其余位置。 输入描述 输入包含两行&#xff0c;第一行包含一个正整数n&#xff08;1 ≤ n…

vue项目打包成exe文件

1. 获取electron-quick-start demo git clone https://github.com/electron/electron-quick-start2. 安装依赖包 npm install 或 npm i // 安装依赖时可能会遇到node版本的问题&#xff0c;需要切换node版本的可以先看下nvm&#xff0c;简单易操作3. 打包项目&#xff08;需要…

[Linux] 性能分析

1. 中断 cat /proc/softirqs

基于YOLOv8模型和PCB电子线路板缺陷目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型PCB电子线路板缺陷目标检测系统可用于日常生活中检测与定位PCB线路板瑕疵&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检…

算法leetcode|72. 编辑距离(rust重拳出击)

文章目录 72. 编辑距离&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;二维数组&#xff08;易懂&#xff09;滚动数组&#xff08;更加优化的内存空间&#xff09; go&#xff1a;c&#xff1a;python&a…

Java Word转PDF(直接转和以图片形式转)、PDF转图片、图片转PDF

在淘宝上找了一家写代码的店铺写了一个工具类&#xff0c;再参考网上的代码&#xff0c;改了改 用到的类库&#xff1a; <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><!--word转pdf--><dependency><groupId>com.documents4…

Qt中如何在qml文件中使用其他的qml文件并创建对象

如果想使用其他的qml文件直接创建对象&#xff0c;必须先这样导入其qml文件并as成别名&#xff0c;才可以创建对象并使用它。 一、导入qml文件&#xff0c;例如&#xff1a; import "CameraConfig.qml" as CameraConfig import "CameraDevelopView.qml" a…

内网穿透实战应用-windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…

设计模式之代理模式(Proxy)的C++实现

1、代理模式的提出 在组件的开发过程中&#xff0c;有些对象由于某种原因&#xff08;比如对象创建的开销很大&#xff0c;或者对象的一些操作需要做安全控制&#xff0c;或者需要进程外的访问等&#xff09;&#xff0c;会使Client使用者在操作这类对象时可能会存在问题&…

聊聊TaskExecutorMetricsAutoConfiguration

序 springboot2.6.0版本提供了TaskExecutorMetricsAutoConfiguration&#xff0c;可以自动给线程池加上metrics TaskExecutorMetricsAutoConfiguration spring-boot-actuator-autoconfigure-2.7.14-sources.jar!/org/springframework/boot/actuate/autoconfigure/metrics/ta…

Vue2到3 Day7 全套学习内容,众多案例上手(内付源码)

简介&#xff1a; Vue2到3 Day1-3 全套学习内容&#xff0c;众多案例上手&#xff08;内付源码&#xff09;_星辰大海1412的博客-CSDN博客本文是一篇入门级的Vue.js介绍文章&#xff0c;旨在帮助读者了解Vue.js框架的基本概念和核心功能。Vue.js是一款流行的JavaScript前端框架…

微信小程序教学系列(1)

第一章&#xff1a;入门指南 第一节&#xff1a;了解微信小程序 微信小程序是一种基于微信平台的应用程序&#xff0c;它可以在微信中直接打开和使用&#xff0c;而无需下载安装。以下是关于微信小程序的一些基本信息&#xff1a; 1. 什么是微信小程序&#xff1f; 微信小程…

java之webservice_aegis.xml学习

开门见山,直奔主题,让我们先来看一个接口: public interface UserInfo {public Collection findRoleInfosByUserID(String userUniqueID);public User findUserInfosByUserID(String userUniqueID);public String test();} 观察此接口,首先我们看findRoleInfosByUserID方法…