POI之Excel导入

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 }

 

posted @ 2018-11-22 17:29  光何  阅读(2380)  评论(0编辑  收藏  举报