利用POI遍历出层级结构的excel表格

import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.util.CellRangeAddress;

public class Util {
    
    /**
     * 获取  和并列 List 并截图有效参数
     * @param lc
     * @return
     */
    
    public static List<String> getMergedString(List <CellRangeAddress> lc){
        //创建一个字符串链表
        List<String> ls = new ArrayList<String>();
        //遍历链表去掉多余的符号
        for(CellRangeAddress cra : lc){
            ls.add(cra.toString().substring(40).replaceAll("\\[", "").replaceAll("\\]", ""));
        }
        //将链表中的数据导进数组当中以便遍历比较
        String[] ls1 = new String[ls.size()];
        
        for(int i=0 ;i<ls1.length;i++){
            ls1[i] = ls.get(i);
        }
        
        
//        for(String s :ls1){
//            System.out.println(s);
//        }
        
        
        
        for(int i=0; i<ls1.length;i++){
            for(int j=i;j<ls1.length;j++){
                if(ls1[i].charAt(0)>ls1[j].charAt(0)){
                    String temp = ls1[i];
                    ls1[i] = ls1[j];
                    ls1[j] = temp;
                }
            }
        }
        
        
        for(int i=0; i<ls1.length;i++){
            for(int j=i;j<ls1.length;j++){
                if(Util.getTheRangeNumber(ls1[i])>Util.getTheRangeNumber(ls1[j])){
                    String temp = ls1[i];
                    ls1[i] = ls1[j];
                    ls1[j] = temp;
                }
            }
        }
//        for(String s :ls1){
//            System.out.println(s);
//        }
        
        
        
        List<String> ls2 = new ArrayList<String>();
        
        for(int i=0 ;i<ls1.length;i++){
            ls2.add(ls1[i]);
        }
        
        return ls2;

    
    
    

}
    public static int getTheRangeNumber(String s){
        
        String str = s.substring(1);
        
        String[] strArr = str.split("\\:");
        
        int i = Integer.parseInt(strArr[0]);
        
    
        return i;
        
    }
    
    public static int getTheRangeNumber2(String s){
        
        String str = s.substring(1);
        
        String[] strArr = str.split("\\:");
        
        String str2 = strArr[1].substring(1);
        
        int i = Integer.parseInt(str2);
        
        
        return i;
        
    }
    
    
    
    public static boolean isMerged(int i,int column,List<String> ls){
        
        char c = (char) (column+65);
        
        List<String> ls1 =  new ArrayList<String>();
        
        
        
        for(String s :ls){
            if(c==s.charAt(0)){
                ls1.add(s);
            }
        }
        
        for(String s:ls1){
            if(i>Util.getTheRangeNumber(s)&&i<Util.getTheRangeNumber2(s)){
                return true;
            }
            
            
        }
        return false;
    }
    
    
}
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import org.apache.poi.ss.usermodel.Footer;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;



public class Test {

    /**
     * @param args
     * @throws IOException 
     */
    //定义文件所在位置
    public static String FILE_TO_BE_READ = "C:\\Users\\Administrator\\Desktop\\健康档案.xlsx"; 
    //定义第几张sheet;
    public static int SHEET_NUM = 4;
    //最小行数 从小0开始
    public static int FIRST_ROW;
    //最大行数 
    public static int LAST_ROW;
    
    
    public static void main(String[] args) throws IOException {
        
        //获取工作薄
        XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(FILE_TO_BE_READ)); 
        //获取工作页
        XSSFSheet sheet = workbook.getSheetAt(SHEET_NUM);
        //获取单元格
        XSSFCell s = sheet.getRow(1).getCell(0);
        //获取最小行数
        FIRST_ROW = sheet.getFirstRowNum();
        //获取最大行数
        LAST_ROW  = sheet.getLastRowNum();

        StringBuilder sb = new StringBuilder();
        
        

        
        List <CellRangeAddress> al =sheet.getMergedRegions();
        
        
        
        List<String> ls = Util.getMergedString(al);
        
//        for(int i=0;i<366;i++){
//        
//        XSSFCell s2 = sheet.getRow(i+1).getCell(0);
//        if(s2.toString().trim()!="")
//        
//        System.out.print(s2+",");
//        }
        String temp = "{";
        
    
        
        for(int i = 0; i<ls.size();i++){
            String s1= ls.get(i);
//            System.out.println(s1);
            int column = s1.charAt(0)-65;
//            System.out.println(column);
            for(int i1=Util.getTheRangeNumber(s1);i1<=Util.getTheRangeNumber2(s1);i1++){
//                System.out.println(i1);
//                System.out.println(Util.getTheRangeNumber2(s1));
//                System.out.println(column);
                XSSFCell s2 = sheet.getRow(i1-1).getCell(column);    
                
                if(s2.getStringCellValue().trim()!=""){
                    System.out.println(s2.getStringCellValue());
                    
//                    temp+=s2.getStringCellValue()+":";
//                    temp+="[";
               }
                XSSFCell s3 = sheet.getRow(i1-1).getCell(column+1);    
                if(s3.getStringCellValue().trim()!=""&&!Util.isMerged(i1-1, column+1, ls)){
                    System.out.println(s3.getStringCellValue());
//                    temp+=s3.getStringCellValue()+":";
//                    temp+="}";
                }
                
            }
        }
        
//        
//        System.out.println(Util.isMerged(60, 0, ls));
//        
//        XSSFCell s2 = sheet.getRow(60).getCell(2);
//        System.out.println(s2.getStringCellValue());
//        System.out.println(temp);
    }

}

 

posted @ 2016-06-08 16:32  CoderV的进阶笔记  阅读(2837)  评论(0编辑  收藏  举报