zoukankan      html  css  js  c++  java
  • 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()+"	"+"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;
            }
    
    
        }
    
    }
  • 相关阅读:
    PSFTP使用简单教程
    JavaMail应用--通过javamail API实现在代码中发送邮件功能
    java常用数据类型转换
    自己封装的Java excel数据读取方法
    java怎样实现重载一个方法
    怎样做好测试保证交付产品质量
    软件测试之测试用例颗粒度问题
    Python 一句命令启动一个web服务器
    ansible 模块之在学习--lineinfile
    centos 7 安装sql 审核工具 inception + archer
  • 原文地址:https://www.cnblogs.com/git-niu/p/8796587.html
Copyright © 2011-2022 走看看