zoukankan      html  css  js  c++  java
  • Java工具类03Excel读取为Map

    基于poi的二次封装,将Excel读取为List<Map>

    直接上代码:

    //参考
    https://www.jianshu.com/p/2ba3c0bd3eb6

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.ArrayList;
     6 import java.util.HashMap;
     7 import java.util.LinkedHashMap;
     8 import java.util.List;
     9 import java.util.Map;
    10 
    11 import org.apache.poi.ss.usermodel.Cell;
    12 import org.apache.poi.ss.usermodel.CellType;
    13 import org.apache.poi.ss.usermodel.Row;
    14 import org.apache.poi.ss.usermodel.Sheet;
    15 import org.apache.poi.ss.usermodel.Workbook;
    16 import org.apache.poi.ss.usermodel.WorkbookFactory;
    17
    19 /**
    20  * ExcelToMapUtils 非反射读取 map
    21  */
    22 public class ExcelToMapUtils {
    23 
    24     public static List<Map<String, Object>> importExcel(String filepath, int index) {
    25         List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
    26         Workbook workbook = null;
    27         try {
    28             workbook = WorkbookFactory.create(new FileInputStream(filepath));
    29             Sheet sheet = workbook.getSheetAt(index);//可根据index,sheetName等
    30             Row row = sheet.getRow(0); //表头行
    31             List<String> keys = new ArrayList<String>();
    32             for (int i = 0; i < row.getLastCellNum(); i++) {
    33                 Cell cell = row.getCell(i); 
    34                 keys.add(String.valueOf(getValue(cell))); //取表头行的每一个元素,组装keys集合
    35             }
    36             //从第二行开始循环行
    37             for (int i = 1; i <= sheet.getLastRowNum(); i++) {
    38                 Row currentRow = sheet.getRow(i);
    39                 Map<String, Object> map = new LinkedHashMap<String, Object>();
    40                 //循环cell列
    41                 for (int j = 0; j < currentRow.getLastCellNum(); j++) {
    42                     map.put(keys.get(j), getValue(currentRow.getCell(j))); //组装Map
    43                 }
    44                 mapList.add(map); //组装List<Map>
    45             }
    46         } catch (Exception e) {
    47             e.printStackTrace();
    48             throw new RuntimeException("excel解析出错");
    49         } finally {
    50             try {
    51                 if (workbook != null) {
    52                     workbook.close();
    53                 }
    54             } catch (IOException e) {
    55                 e.printStackTrace();
    56             }
    57         }
    58         return mapList;
    59     }
    60 
    61     private static Object getValue(Cell cell) {
    62         if(cell==null) {
    63             return "";
    64         }
    65         if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
    66             return cell.getBooleanCellValue();
    67         } else if (cell.getCellTypeEnum() == CellType.NUMERIC) {
    68             return cell.getNumericCellValue();
    69         } else {
    70             return String.valueOf(cell.getStringCellValue());
    71         }
    72     }73 }
  • 相关阅读:
    进度条05
    计算机视觉基础(一)——左右手坐标系转换时R和T的具体形式分析
    使用unity3D开发同时打开手机前后摄像头实例程序
    使用OpenCV读取摄像头图像并显示
    Query on a tree II 倍增LCA
    Nuclear Power Plant ZOJ
    [AHOI2009]中国象棋 BZOJ1801 dp
    What Goes Up UVA
    Query on a tree 树链剖分 [模板]
    hdu 6196 搜索+剪枝
  • 原文地址:https://www.cnblogs.com/tongjc-0901/p/12566031.html
Copyright © 2011-2022 走看看