package com.taover.bazhuayun.analysis.util; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.taover.easyexcel.EasyExcel; import cn.hutool.core.text.csv.CsvRow; import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.util.CharsetUtil; public class ExcelUtil { private final static String CSV =".csv"; //csv private static boolean endWithCsv(String fileName) { int dotIndex = fileName.lastIndexOf("."); if(dotIndex < 0) { return false; } String filteTypeLower = fileName.substring(dotIndex).trim().toLowerCase(); if(CSV.equals(filteTypeLower)){ return true; } return false; } private static void checkFile(File dataFile) throws Exception{ if(dataFile == null) { throw new Exception("未传入文件引用"); } if(!dataFile.exists()) { throw new Exception("文件不存在["+dataFile.getAbsolutePath()+"]"); } } private static List> transCsvRowToList(List rowData){ List> data = new ArrayList>(); if(rowData == null) { return data; } for(CsvRow item: rowData) { List itemData = new ArrayList(); for(String cell: item.getRawList()) { itemData.add(cell); } data.add(itemData); } return data; } public static List> readExcelSheetAllForList(File dataFile, boolean readHiddenRow) throws Exception{ checkFile(dataFile); if(endWithCsv(dataFile.getName())) { return transCsvRowToList(CsvUtil.getReader().read(dataFile, CharsetUtil.CHARSET_GBK).getRows()); }else { return transListMapTo2List(EasyExcel.read(dataFile).readHiddenRow(readHiddenRow).headRowNumber(0).doReadAllSync()); } } public static Map>> readExcelSheetAllForMap(File dataFile, boolean readHiddenRow) throws Exception{ checkFile(dataFile); if(endWithCsv(dataFile.getName())) { return Collections.singletonMap("0", transCsvRowToList(CsvUtil.getReader().read(dataFile, CharsetUtil.CHARSET_GBK).getRows())); }else { return transMapListMapToMap2List(EasyExcel.read(dataFile).readHiddenRow(readHiddenRow).headRowNumber(0).doReadAllSyncForMap()); } } private static Map>> transMapListMapToMap2List(Map>> doReadAllSyncForMap) { Map>> data = new HashMap>>(); if(doReadAllSyncForMap == null) { return data; } for(Entry>> item: doReadAllSyncForMap.entrySet()) { List> itemData = new ArrayList>(); for(Map cellData: item.getValue()) { itemData.add(transMapToList(cellData)); } data.put(item.getKey().toString(), itemData); } return data; } private static List> transListMapTo2List(List listMapData) { List> data = new ArrayList>(); if(listMapData == null) { return data; } for(Object item: listMapData) { data.add(transMapToList((Map) item)); } return data; } private static List transMapToList(Map cellData) { List data = new ArrayList((int)(cellData.size()*1.5)); if(cellData == null || cellData.isEmpty()) { return data; } //获取最大索引 int maxIndex = 0; for(Entry item: cellData.entrySet()) { if(item.getKey() > maxIndex && item.getValue()!=null && !"".equals(item.getValue())) { maxIndex = item.getKey(); } } //设置元素并填入空串 fillBlankToList(data, maxIndex+1); //置入元素 int dataSize = data.size(); for(Entry item: cellData.entrySet()) { if(item.getKey() >= dataSize) { continue; } if(item.getValue() == null) { data.set(item.getKey(), ""); }else { data.set(item.getKey(), item.getValue()); } } return data; } private static void fillBlankToList(List data, int blankNumber) { for(int i=0; i> readExcelSheet(File dataFile, boolean readHiddenRow) throws Exception{ checkFile(dataFile); if(endWithCsv(dataFile.getName())) { return transCsvRowToList(CsvUtil.getReader().read(dataFile, CharsetUtil.CHARSET_GBK).getRows()); }else { return transListMapTo2List(EasyExcel.read(dataFile).readHiddenRow(readHiddenRow).headRowNumber(0).doReadSelectedSync()); } } }