zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    5、Hystrix服务熔断(服务端)与服务降级(客户端)
    迷宫回溯问题
    4、负载均衡:Ribbon、Feign
    PHP-删除排序数组中的重复项
    MYSQL-连续出现的数字
    PHP
    MYSQL分数排名
    MYSQL查询第二高的薪水
    PHP算法之有效的括号
    PHP算法之电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/guanghe/p/10002446.html
Copyright © 2011-2022 走看看