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 }
  • 相关阅读:
    现代软件工程 第一章 概论 第4题——邓琨
    现代软件工程 第一章 概论 第9题——邓琨
    现代软件工程 第一章 概论 第7题——张星星
    现代软件工程 第一章 概论 第5题——韩婧
    hdu 5821 Ball 贪心(多校)
    hdu 1074 Doing Homework 状压dp
    hdu 1074 Doing Homework 状压dp
    hdu 1069 Monkey and Banana LIS变形
    最长上升子序列的初步学习
    hdu 1024 Max Sum Plus Plus(m段最大子列和)
  • 原文地址:https://www.cnblogs.com/tongjc-0901/p/12566031.html
Copyright © 2011-2022 走看看