1,maven配置

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi-ooxml</artifactId>
  4. <version>${poi.version}</version>
  5. </dependency>

2,Controller层

  1. /**
  2. * Excel导入数据
  3. * @return
  4. */
  5. @ResponseBody
  6. @RequestMapping(value="importExcel", method={RequestMethod.GET, RequestMethod.POST})
  7. public String importExcel(HttpServletRequest request, String name) {
  8. JSONObject result = new JSONObject();
  9. result.put("code", 0);
  10. result.put("msg", "导入成功!");
  11. //初始化解析器
  12. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getServletContext());
  13. //解析form中是否有enctype="multipart/form-data"
  14. try {
  15. if (multipartResolver.isMultipart(request)) {
  16. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  17. Iterator iterator = multipartRequest.getFileNames();
  18. while (iterator.hasNext()) {
  19. MultipartFile multipartFile = multipartRequest.getFile(iterator.next().toString());
  20. List<String[]> data = GhPOIUtils.readExcel(multipartFile);
  21. Method method = IExportExcelService.class.getDeclaredMethod(name + "Import", new Class[]{List.class});
  22. method.invoke(exportExcelService, data);
  23. }
  24. }
  25. } catch(Exception e) {
  26. result.put("code", -1);
  27. result.put("msg", e.getMessage());
  28. }
  29. return result.toString();
  30. }

3,Util

  1. package com.smart.produce.core.utils.comm;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. import org.apache.log4j.Logger;
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  11. import org.apache.poi.ss.usermodel.Cell;
  12. import org.apache.poi.ss.usermodel.Row;
  13. import org.apache.poi.ss.usermodel.Sheet;
  14. import org.apache.poi.ss.usermodel.Workbook;
  15. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  16. import org.springframework.web.multipart.MultipartFile;
  17. /**
  18. * excel读写工具类 */
  19. public class GhPOIUtils {
  20. private static Logger logger = Logger.getLogger(GhPOIUtils.class);
  21. private final static String xls = "xls";
  22. private final static String xlsx = "xlsx";
  23.  
  24. public static void checkFile(MultipartFile file) throws IOException{
  25. //判断文件是否存在
  26. if(null == file){
  27. logger.error("文件不存在!");
  28. throw new FileNotFoundException("文件不存在!");
  29. }
  30. //获得文件名
  31. String fileName = file.getOriginalFilename();
  32. //判断文件是否是excel文件
  33. if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){
  34. logger.error(fileName + "不是excel文件");
  35. throw new IOException(fileName + "不是excel文件");
  36. }
  37. }
  38.  
  39. public static Workbook getWorkBook(MultipartFile file) {
  40. //获得文件名
  41. String fileName = file.getOriginalFilename();
  42. //创建Workbook工作薄对象,表示整个excel
  43. Workbook workbook = null;
  44. try {
  45. //获取excel文件的io流
  46. InputStream is = file.getInputStream();
  47. //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
  48. if(fileName.endsWith(xls)){
  49. //2003
  50. workbook = new HSSFWorkbook(is);
  51. }else if(fileName.endsWith(xlsx)){
  52. //2007
  53. workbook = new XSSFWorkbook(is);
  54. }
  55. } catch (IOException e) {
  56. logger.info(e.getMessage());
  57. }
  58. return workbook;
  59. }
  60.  
  61. public static String getCellValue(Cell cell){
  62. String cellValue = "";
  63. if(cell == null){
  64. return cellValue;
  65. }
  66. //把数字当成String来读,避免出现1读成1.0的情况
  67. if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
  68. cell.setCellType(Cell.CELL_TYPE_STRING);
  69. }
  70. //判断数据的类型
  71. switch (cell.getCellType()){
  72. case Cell.CELL_TYPE_NUMERIC: //数字
  73. cellValue = String.valueOf(cell.getNumericCellValue());
  74. break;
  75. case Cell.CELL_TYPE_STRING: //字符串
  76. cellValue = String.valueOf(cell.getStringCellValue());
  77. break;
  78. case Cell.CELL_TYPE_BOOLEAN: //Boolean
  79. cellValue = String.valueOf(cell.getBooleanCellValue());
  80. break;
  81. case Cell.CELL_TYPE_FORMULA: //公式
  82. cellValue = String.valueOf(cell.getCellFormula());
  83. break;
  84. case Cell.CELL_TYPE_BLANK: //空值
  85. cellValue = "";
  86. break;
  87. case Cell.CELL_TYPE_ERROR: //故障
  88. cellValue = "非法字符";
  89. break;
  90. default:
  91. cellValue = "未知类型";
  92. break;
  93. }
  94. return cellValue;
  95. }
  96.  
  97. /**
  98. * 读入excel文件,解析后返回
  99. * @param file
  100. */
  101. public static List<String[]> readExcel(MultipartFile file) throws IOException{
  102. //检查文件
  103. checkFile(file);
  104. //获得Workbook工作薄对象
  105. Workbook workbook = getWorkBook(file);
  106. //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
  107. List<String[]> list = new ArrayList<String[]>();
  108. if(workbook != null){
  109. for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
  110. //获得当前sheet工作表
  111. Sheet sheet = workbook.getSheetAt(sheetNum);
  112. if(sheet == null){
  113. continue;
  114. }
  115. //获得当前sheet的开始行
  116. int firstRowNum = sheet.getFirstRowNum();
  117. //获得当前sheet的结束行
  118. int lastRowNum = sheet.getLastRowNum();
  119. //循环所有行
  120. for(int rowNum = firstRowNum;rowNum <= lastRowNum;rowNum++){
  121. //获得当前行
  122. Row row = sheet.getRow(rowNum);
  123. if(row == null){
  124. continue;
  125. }
  126. //获得当前行的开始列
  127. int firstCellNum = row.getFirstCellNum();
  128. //获得当前行的列数
  129. int lastCellNum = row.getPhysicalNumberOfCells();
  130. String[] cells = new String[row.getPhysicalNumberOfCells()];
  131. //循环当前行
  132. for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
  133. Cell cell = row.getCell(cellNum);
  134. cells[cellNum] = getCellValue(cell);
  135. }
  136. list.add(cells);
  137. }
  138. }
  139. workbook.close();
  140. }
  141. return list;
  142. }
  143. }

POI之Excel导入的更多相关文章

  1. SpringBoot集成文件 - 集成POI之Excel导入导出

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...

  2. Spring Boot学习笔记----POI(Excel导入导出)

    业务:动态生成模板导出Excel,用户修改完再导入Excel. Spring boot + bootstrap + poi 1.添加Dependence <dependency> < ...

  3. Java之POI的excel导入导出

    一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...

  4. POI操作Excel导入和导出

    Apache的POI组件是Java操作Microsoft Office办公套件的强大API,当中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel.由于Word和Po ...

  5. 【原创】POI操作Excel导入导出工具类ExcelUtil

    关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...

  6. 基于POI的Excel导入导出(JAVA实现)

    今天做了个excel的导入导出功能,在这记录下. 首先现在相关poi的相关jar包,资源链接:http://download.csdn.net/detail/opening_world/9663247 ...

  7. POI实现Excel导入导出

    我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类. 一个excel表格: ...

  8. Java使用Apache POI进行Excel导入和导出

    Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...

  9. 使用poi进行excel导入并解析插入数据库

    前言 最近还得写excel的导入导出,结果还是得百度,虽然都能看懂,但是还是想记录下来这些东西 正文 1. 导入jar包 <dependency> <groupId>org.a ...

随机推荐

  1. Xcode模版生成文件头部注释

    在使用Xcode创建工程或者新建类的时候,顶部都会有一些xcode帮我们生成的注释 //// MySingletonClass.h// 单例模式//// Created by mark on 15/8 ...

  2. ajax的历史

    ajax (AJAX开发) 编辑 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX ...

  3. poj_3977 折半枚举

    题目大意 给定N(N<=35)个数字,每个数字都<= 2^15. 其中一个或多个数字加和可以得到s,求出s的绝对值的最小值,并给出当s取绝对值最小值时,需要加和的数字的个数. 题目分析 需 ...

  4. 【HTML】改变鼠标样式图片css

    你需要一张图   .ico 的 格式 如果一开始你要解决的是怎么去用png 格式图片转成 ICO格式 先做一张32*32的PNG格式图片 然后 打开http://www.easyicon.net/co ...

  5. nodejs 事件EventEmitter

    index.js: // 引入 events 模块 var events = require('events'); //处理函数要写在调用前 var eventHandler = function() ...

  6. 【BZOJ2743】[HEOI2012]采花 离线+树状数组

    [BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...

  7. CentOS 目录结构详解

     linux 目录结构 linux目录树 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: ...

  8. JAVAWEB Filter使用

    Filter学习 1Filter是什么:是过滤器简称 2Filter有什么作用:在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator ...

  9. Oracle Schema Objects——Synonyms

    Oracle Schema Objects 同义词 同义词 = 表的别名. 现在假如说有一张数据表的名称是“USER1.student”,而现在又为这张数据表起了一个“USER1”的名字,以后就可以直 ...

  10. Nmap介绍

    1.Nmap介绍 Nmap用于列举网络主机清单.管理服务升级调度.监控主机或服务运行状况.Nmap可以检测目标机是否在线.端口开放情况.侦测运行的服务类型及版本信息.侦测操作系统与设备类型等信息. 1 ...