近期在工作上,遇到了实现Excel文件的导入功能,在此和小伙伴们分享一下过程。
实现Excel文件的导入呢,首先我们需要先上传文件,然后在后端进行解析文件中的内容。这里我们需要用到 poi 的这样一个jar包。
因为我的工作项目使用的是gradle,不是Maven,所有我的jar包都是去网上下载,然后复制到我的lib文件下。

这些jar包都是应该能够使用到的jar包,至于怎么去下载jar包,不会的可以去度娘搜索。如果使用不了的话,还可能会因为版本问题,去搜索适合自己的版本jar包。
导入完poijar包后,我们就可以进行测试开发了。

后端代码如下:

Controller层
@RestController
@RequestMapping("/excel")
public class ExcelController {@Resourceprivate ExcelService excelService;/*** 首先上传文件模块*/@RequestMapping(value = "/uploadExcel", method = RequestMethod.POST)public WrappedResult uploadFile(@RequestParam MultipartFile file) {String a = excelService.uploadExcel(file,tenantId,userId);return WrappedResult.successWrapedResult(a);} catch (Exception e) {return WrappedResult.failedValidateWrappedResult(e.getMessage());}}
}
Service层
public interface ExcelService {String uploadExcel(MultipartFile file)
}
Service实现类
@Service
public class ExcelServiceImpl implements ExcelService{@Autowiredprivate ExcelDao excelDao;/*** 先上传文件 */@Overridepublic String uploadExcel(MultipartFile file) throws Exception {if (file == null) {throw new NullArgumentException();}String filename = file.getOriginalFilename();if (filename == null) {throw new NullArgumentException();}String a = "";try {// 调用解析文件方法a = parseRowCell(filename, file.getInputStream());return a;} catch (IOException e) {throw new Exception(e.getMessage());}}/*** 解析文件中的数据*/private String parseRowCell(String filename, InputStream is) {Map map = new HashMap<>();try {Workbook workbook = null;// 判断excel的后缀,不同的后缀用不同的对象去解析// xls是低版本的Excel文件if (filename.endsWith(".xls")) {workbook = new HSSFWorkbook(is);}// xlsx是高版本的Excel文件if (filename.endsWith(".xlsx")) {workbook = new XSSFWorkbook(is);}if (workbook == null) {throw new NullArgumentException();}// 取到excel 中的第一张工作表Sheet sheet = workbook.getSheetAt(0);if (sheet == null) {throw new NullArgumentException();}// 工作表中第一行是表头,不获取,从第二行开始获取for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {// 获取到这一行的数据Row row = sheet.getRow(rowNum);if (row == null) {continue;}/*** 以下的取数据,具体看你的Excel文件中有多少列数据,以此类推*/                // 取到这一行的第一列数据 (设备名称),赋值给deviceNameString deviceName = "";if (row.getCell(0) != null) {row.getCell(0).setCellType(CellType.STRING);deviceName = row.getCell(0).getStringCellValue().trim();}// 取到这一行的第二列数据 (设备类型),赋值给deviceTypeString deviceType = "";if (row.getCell(1) != null) {row.getCell(1).setCellType(CellType.STRING);deviceType = row.getCell(1).getStringCellValue().trim();}// 取到这一行的第三列数据 (设备型号),赋值给specificationString specification = "";if (row.getCell(2) != null) {row.getCell(2).setCellType(CellType.STRING);specification = row.getCell(2).getStringCellValue().trim();}// 取到这一行的第四列数据 (总数量),赋值给totalString total = "";if (row.getCell(3) != null) {row.getCell(3).setCellType(CellType.STRING);total = row.getCell(3).getStringCellValue().trim();}if (StringUtils.isAllBlank(deviceName, deviceType, specification, total)) {continue;}if (StringUtils.isAnyBlank(deviceName, deviceType, specification, total)) {throw new NullArgumentException();}/**这段可忽略// 获取完每一行的数据后,存入对应的业务表中String id = UUID.randomUUID().toString().replace("-", "");map.put("id", id);map.put("deviceName", deviceName);map.put("deviceType", deviceType);map.put("specification", specification);map.put("total", total);map.put("tenantId", tenantId);map.put("createUser", tenantId);excelDao.saveDeviceInfo(map);*/}return "true";} catch (IOException e) {return e.getMessage();}}}

因为我前端使用的是Vue,前端代码也一起贴出来,有需要的可以自己随便看看。

前端代码:
<Upload action="/common/excel/uploadExcel" :show-upload-list="false" :data="headers":on-success="handleSuccess" :before-upload="handleBeforeUpload" ><Button class="ivu-mr-8" type="primary" icon="md-add">导入</Button>
</Upload>

这里使用的是Vue 中Upload组件,其中使用到一些API属性,需要的可自行去iview官网学习。
链接: Upload组件使用

         // 接收后台传回来的参数,true 为导入成功,false 为导入失败handleSuccess (res) {// debuggerif (res.successful == true) {this.$Message.info('导入文件成功');} else {this.$Message.error('导入文件失败(请检查文件中数据是否有为空)');}this.getShebtzxx();},// 导入文件前验证文件是否为Excel,不是直接返回falsehandleBeforeUpload (file) {// debuggerif (!file.name.endsWith(".xls") && !file.name.endsWith(".xlsx")) {this.$Message.error('请选择Excel文件导入');return false;}},

结束,告辞
希望这篇文章能帮助你!

Java实现Excel文件的导入功能相关推荐

  1. java做 excel文件的 导入导出 (SSM+layer)

    做的项目使用时 Java ssm + 前端layer+ freemark. 因为是从项目中扣的代码.整理了下逻辑. 有问题的下方留言哈 导入的依赖 poi <!-- https://mvnrep ...

  2. JAVA实现Excel文件的导入导出

    版权声明:请勿用于任何商业用途的文章转载,转载请说明出处! 1.导入POI的JAR包 <!-- excel POI --><dependency><groupId> ...

  3. java中excel文件的导入,限制上传的文件类型,文件的大小,显示上传文件的进度条...

    1. 前台代码 1 <!DOCTYPE html> 2 <html lang="en" xmlns:th="http://www.thymeleaf.o ...

  4. java实现excel文件批量导入数据

    具体实现: 以学生信息为例,将Excel模板信息配置在XML文件中,通过POI实现对excel文件读取操作,然后将读取的数据插入数据库中.具体思路是将模板信息配置在xml中,在项目启动时,通过spri ...

  5. 【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)

    前言:在实际的开发中,我们经常需要用户在界面中输入大量重复且有规律的数据,但是一个表单一个表单的填写效率过慢,而且过多的表单也会给JavaWeb的业务逻辑开发带来不小的困扰,所以我们可以使用一个Exc ...

  6. 超详细的java生成excel文件并下载

    在网上随手一搜,可以搜到很多java生成excel文件相关的博客,但每个都有不同,核心点说清楚了,但具体运用的时候,相信大家或多或少都没法一次直接运用,这样每次去找并且运用的时候很费时间,所以这也是我 ...

  7. Java导出excel文件以.xlsx后缀结尾,可设置部分单元格只读

    前言 最近在做一个小项目,有个模块的功能涉及到excel的导入导出,并且要求对导出的excel文件部分列和单元格设置为只读不可更改,在网上到处查找了一番资料,结合自己的想法,发现也并不难,这里整理记录 ...

  8. java下载xlsx文件_【小坑】java下载excel文件

    excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩-- 1.inputstream序列化问题 Could not write JSON document: ...

  9. 将Excel文件数据库导入SQL Server

    将Excel文件数据库导入SQL Server的三种方案//方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server openFileDialog = n ...

最新文章

  1. JavaScript初学者编程题(22)
  2. 站长们 技术不是你生存的全部
  3. SnipperImages(Silverlight DEMO)控件设计之--Slider和ColorSlider
  4. 2018.8.2 Juint测试介绍及其命名的规范
  5. UE4 iOS设备的兼容性
  6. MTK驱动(53)---平台DTS文件匹配过程
  7. 关于 JQuery 的克隆
  8. java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)
  9. Android 屏幕旋转时保存状态
  10. 三分钟入门电力系统之----------三道防线
  11. docker安装tomcat8
  12. SAP Open SQL
  13. 磁碟机病毒(VcingT)越来越变态——最新分析报告发布
  14. esp32 支持 sd卡 micropython 文件系统_ESP32/ESP8266 MicroPython教程:将文件上传到文件系统...
  15. 这几个专业考上研再考公务员更有优势!
  16. 计算机显卡型号中数字含义详解,显卡型号全解读:那么多字母如何理解?又分别代表啥意思?...
  17. CallBack函数调用
  18. 局域网找不到其它电脑
  19. 手机控制电脑远程开机,笔记本与老电脑都能实现
  20. 安装ecshop php,PHPstudy和ecshop的安装和使用

热门文章

  1. linux终端跟苹果手机传文件,【Linux】服务器与本地机传输文件--MAC
  2. Intel CPU型号规格大全 (2007.08)
  3. C++练习题1:演讲比赛程序
  4. L58.linux命令每日一练 -- 第九章 Linux进程管理命令 -- pgrep和kill
  5. python运维怎么学
  6. Oracle-Rman备份恢复单个PDB
  7. java 实体类中增加非数据库字段,同时兼容mybatis-puls与jpa
  8. 【调剂】江苏海洋大学导师接收计算机调剂研究生
  9. 使用window自带的画图工具取色
  10. NI板卡新建仿真接口步骤