zoukankan      html  css  js  c++  java
  • POI 读取 Excel 文件

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    
    
    public class ReadExcel {
        private POIFSFileSystem pois ;
        private HSSFWorkbook  workBook;
        private HSSFSheet  sheet;
        private HSSFRow  row;
        private HSSFCell cell;
        List<String> RegionList = new ArrayList<String>();
        Map<String, String> unitMap = new HashMap<String, String>(); //存放集合 <region,unit>1:1
        Map<String, List<String>> deptMap = new HashMap<String, List<String>>(); //存放集合 <unit,dept>1:n
        /**
         * sheetName
         * @param os
         * @param sheetCount
         * @return
         * @throws Exception
         */
        public List readExcelSheetName(InputStream os,int sheetCount) throws Exception{        
            pois =  new POIFSFileSystem(os);
            workBook = new HSSFWorkbook(pois);
            for(int i=0;i<sheetCount;i++){
                sheet = workBook.getSheetAt(i);            
                String sheetName = sheet.getSheetName();        
    //            System.out.println("sheetName:"+sheetName);
                RegionList.add(sheetName);    
                List plist = readCell(sheet,sheetName);    
                File f = new File("F://person.txt");
                OutputStream osa = new FileOutputStream(f);        
                System.out.println(plist.size() + " 总数");
                for(int j = 0 ;j<plist.size();j++){
                    Person per = (Person) plist.get(j);
                    StringBuffer sb = new StringBuffer();
                    sb.append("region:"+per.getCity()+"           "+"unit:"+per.getUnit()+"            "+"dept:"+per.getDept()+"         "+"name:"+per.getName());
                    sb.append("              "+"tel:"+per.getTel()+"            "+"phone:"+per.getPhone());
                    sb.append("
    ");
                    osa.write(sb.toString().getBytes());
                }
                osa.close();
            }        
            return RegionList;
        }    
        
        /**
         * 一个sheet上的相关信心
         * @param sheet
         * @return
         */
        public List readCell(HSSFSheet sheet,String sheetName){
            List Personlist = new ArrayList();        
            String dept = "";
            String unit = "";
            int rowcount = 0;        
            for (Iterator iterator = sheet.iterator(); iterator.hasNext();) {
                Person person = new Person();        
                HSSFRow rows = (HSSFRow) iterator.next(); //获得每个sheet的行数
                if(rowcount == 0 ){ //有特殊的特殊处理,第一行标题
                    cell = rows.getCell(1);
                    String title = cell.getStringCellValue();
    //                System.out.println("一标题:"+title.trim());
                }else if(rowcount ==1 ){ //第二行,单位名称
                    cell = rows.getCell(0);
                    String unitCell = cell.getStringCellValue();
                    unit =  unitCell.replace("单位名称:", "");
                    unitMap.put(sheetName, unit);//
                }else{
                    for(int i = 0;i<rows.getPhysicalNumberOfCells();i++){  //获得每行的cell个数
                        cell = rows.getCell(i);            
                        if(rowcount == 2){ //第三行标题栏
    //                        switch (i){
    //                        case 1 :
    //                            String b1 = cell.getStringCellValue();    
    //                            System.out.println("三标题:"+b1);    
    //                            break;
    //                        case 2 :
    //                            String b2 = cell.getStringCellValue();
    //                            System.out.println("三标题:"+b2);    
    //                            break;
    //                        case 3:
    //                            String b3 = cell.getStringCellValue();
    //                            System.out.println("三标题:"+b3);    
    //                            break;
    //                        case 4:
    //                            String b4 = cell.getStringCellValue();
    //                            System.out.println("三标题:"+b4);    
    //                            break;
    //                        }
                        }else{
                            if(cell != null){                    
                                if(i == 0 && formateCell(cell) != null&& !"".equals(formateCell(cell).trim())){ //第一个单元格有合并的部分
                                    System.out.println(cell.getCellType()+"+++++"+cell.getStringCellValue().trim());
                                    dept = cell.getStringCellValue();
                                    dept = dept.replaceAll("
    ", "").replace(" ","");
                                    List deplist = deptMap.get("unit");
                                    if(deplist == null ){
                                        deplist = new ArrayList<String>();
                                        deplist.add(dept);
                                    }                                
                                    deptMap.put(unit, deplist);                                
                                }else{
                                    switch (i){
                                    case 1 :
                                        String b1 = cell.getStringCellValue();        
                                        person.setName(b1);
                                        break;
                                    case 2 :
                                        String b2 = cell.getStringCellValue();
                                        person.setPosition(b2);
                                        break;
                                    case 3:                                    
                                        //System.out.println("-------"+cell.getCellType());
                                        double b3 =cell.getNumericCellValue();    //默认的cell类型:0:double,1:string    
                                        person.setTel(formatDouble(b3+""));
                                        break;
                                    case 4:
                                        double b4 = cell.getNumericCellValue();        
                                        person.setPhone(formatDouble(b4+""));
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    person.setCity(sheetName);
                    person.setDept(dept);
                    person.setUnit(unit);
                    if(rowcount !=2 ){
                        Personlist.add(person);            
                    }
               }
                rowcount ++;
            }
            return Personlist;
        }
    
        /**
         * 格式化cell里面的内容
         * @param cell
         * @return
         */
        private String formateCell(HSSFCell cell){
            String strCell = "";
            switch (cell.getCellType()){
            case HSSFCell.CELL_TYPE_STRING:
                strCell = cell.getStringCellValue();
                break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                strCell = formatDouble(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;
        }
        
        private  String formatDouble(String str) {
            if (str == null || "".equals(str.trim()))
                return "";
            if (str.indexOf(".") > 0) {
                if (str.indexOf("E") > 0) {
                    str = str.substring(0, str.indexOf("E")).replace(".", "");
                } else {
                    str = str.substring(0, str.indexOf("."));
                }
            }
            return str;
        }
    
    }

    所需jar 

    官网下载最新jar : http://poi.apache.org/

  • 相关阅读:
    在Java中如何优雅地判空
    软件可以流氓到什么程度?从卸载步骤就可以看出来!
    面试中常问的List去重问题,你都答对了吗?
    为什么程序员都不喜欢使用switch而使用if来做条件跳转
    那些年,我们一起卸载过的软件…
    趣图:当我捕获Bug的时候
    9个成功的微服务设计的基础知识
    5.1 包装类
    4.9 初始化块
    4.8 继承与组合
  • 原文地址:https://www.cnblogs.com/estellez/p/4087401.html
Copyright © 2011-2022 走看看