poi读取excel工具类
package com.manage.utils; import ch.qos.logback.core.net.SyslogOutputStream; import com.google.gson.Gson; import com.manage.FrameWeb.FrameLib.SystemLogHelper; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import sun.reflect.generics.tree.Tree; import java.io.*; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.*; public class ExcelReader { private POIFSFileSystem fs; private Workbook wb; private Sheet sheet; private Row row; /** * 读取Excel表格表头的内容 * * @param file * @return String 表头内容的数组 */ public String[] readExcelTitle(File file) { try { InputStream is = new FileInputStream(file); if (file.getName().toLowerCase().endsWith(".xls")) { fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(fs); } else { wb = new XSSFWorkbook(is); } } catch (IOException e) { e.printStackTrace(); } sheet = wb.getSheetAt(0); row = sheet.getRow(0); // 标题总列数 int colNum = row.getPhysicalNumberOfCells(); System.out.println("colNum:" + colNum); String[] title = new String[colNum]; for (int i = 0; i < colNum; i++) { //title[i] = getStringCellValue(row.getCell((short) i)); title[i] = getCellFormatValue(row.getCell((short) i)); } return title; } /** * 读取Excel数据内容 * * @param file * @return Map 包含单元格数据内容的Map对象 */ public Map <Integer, String> readExcelContent(File file) { Map <Integer, String> content = new HashMap <Integer, String>(); String str = ""; try { InputStream is = new FileInputStream(file); if (file.getName().toLowerCase().endsWith(".xls")) { //fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(is); } else { wb = new XSSFWorkbook(is); } } catch (IOException e) { e.printStackTrace(); } sheet = wb.getSheetAt(0); // 得到总行数 int rowNum = sheet.getLastRowNum(); row = sheet.getRow(0); int colNum = row.getPhysicalNumberOfCells(); // 正文内容应该从第二行开始,第一行为表头的标题 for (int i = 1; i <= rowNum; i++) { row = sheet.getRow(i); int j = 0; while (j < colNum) { // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据 // 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean // str += getStringCellValue(row.getCell((short) j)).trim() + // "-"; str += getCellFormatValue(row.getCell((short) j)).trim() + " "; j++; } content.put(i, str); str = ""; } return content; } /** * 获取单元格数据内容为字符串类型的数据 * * @param cell Excel单元格 * @return String 单元格数据内容 */ private String getStringCellValue(HSSFCell cell) { String strCell = ""; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: strCell = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: strCell = String.valueOf(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_BOOLEAN: strCell = String.valueOf(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_BLANK: strCell = ""; break; default: strCell = ""; break; } if (strCell.equals("") || strCell == null) { return ""; } if (cell == null) { return ""; } return strCell; } /** * 获取单元格数据内容为日期类型的数据 * * @param cell Excel单元格 * @return String 单元格数据内容 */ private String getDateCellValue(HSSFCell cell) { String result = ""; try { int cellType = cell.getCellType(); if (cellType == HSSFCell.CELL_TYPE_NUMERIC) { Date date = cell.getDateCellValue(); result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1) + "-" + date.getDate(); } else if (cellType == HSSFCell.CELL_TYPE_STRING) { String date = getStringCellValue(cell); result = date.replaceAll("[年月]", "-").replace("日", "").trim(); } else if (cellType == HSSFCell.CELL_TYPE_BLANK) { result = ""; } } catch (Exception e) { System.out.println("日期格式不正确!"); e.printStackTrace(); } return result; } /** * 根据HSSFCell类型设置数据 * * @param cell * @return */ private String getCellFormatValue(Cell cell) { String cellvalue = ""; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: { // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是Date类型则,转化为Data格式 //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00 //cellvalue = cell.getDateCellValue().toLocaleString(); //方法2:这样子的data格式是不带带时分秒的:2011-10-12 Date date = cell.getDateCellValue(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); cellvalue = sdf.format(date); } // 如果是纯数字 else { // 取得当前Cell的数值 DecimalFormat df = new DecimalFormat("#"); cellvalue = df.format(cell.getNumericCellValue()); } break; } // 如果当前Cell的Type为STRIN case HSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString(); break; // 默认的Cell值 default: cellvalue = " "; } } else { cellvalue = ""; } return cellvalue; } public static void main(String[] args) { try { System.out.println("开始"); File file = new File("D:\\DownLoads\\ll.xlsx"); ExcelReader er = new ExcelReader(); Map <Integer, List <String>> ms = er.readExcelContentFans(file); Set <Integer> set = ms.keySet(); List <TreeDto> list = new ArrayList <>(); for (Integer i : set) { List <String> ls = ms.get(i); String str = ""; TreeDto dto = new TreeDto(); dto.setID(String.valueOf(list.get(0))); dto.setPID(String.valueOf(list.get(8))); list.add(dto); } List <TreeDto> rootTrees = new ArrayList <TreeDto>(); for (TreeDto tree : list) { if (tree.getPID() == "ee3c8a59-3546-11e7-a3f8-5254007b6f02") { rootTrees.add(tree); } for (TreeDto t : list) { if (t.getPID() == t.getID()) { if (tree.getList() == null) { List <TreeDto> myChildrens = new ArrayList <TreeDto>(); myChildrens.add(t); tree.setList(myChildrens); } else { tree.getList().add(t); } } } } for (TreeDto t : rootTrees){ List<TreeDto> td=t.getList(); /* if(td!=null&&td.size()>0){ for(TreeDto dto:td){ SyslogOutputStream } }*/ System.out.println("ID:"+t.getID()+"\t"+"PID:"+t.getPID()); } } catch (Exception e) { e.getMessage(); } } /** * 读取Excel数据内容 * * @param file * @return Map 包含单元格数据内容的Map对象 */ public Map <Integer, List <String>> readExcelContentFans(File file) { Map <Integer, List <String>> content = new HashMap <Integer, List <String>>(); String str = ""; try { InputStream is = new FileInputStream(file); if (file.getName().toLowerCase().endsWith(".xls")) { //fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(is); } else { wb = new XSSFWorkbook(is); } } catch (IOException e) { e.printStackTrace(); } sheet = wb.getSheetAt(0); // 得到总行数 int rowNum = sheet.getLastRowNum(); row = sheet.getRow(0); int colNum = row.getPhysicalNumberOfCells(); // 正文内容应该从第二行开始,第一行为表头的标题 for (int i = 1; i <= rowNum; i++) { row = sheet.getRow(i); int j = 0; List <String> colNumContent = new ArrayList <>(); while (j < colNum) { // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据 // 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean // str += getStringCellValue(row.getCell((short) j)).trim() + // "-"; colNumContent.add(getCellFormatValue(row.getCell((short) j))); /*str += getCellFormatValue(row.getCell((short) j)).trim() + " ";*/ j++; } content.put(i, colNumContent); } return content; } public static class TreeDto { private String ID; private List <TreeDto> list; public List <TreeDto> getList() { return list; } public void setList(List <TreeDto> list) { this.list = list; } private String PID; public String getID() { return ID; } public void setID(String ID) { this.ID = ID; } public String getPID() { return PID; } public void setPID(String PID) { this.PID = PID; } } }