Java POI读取Excel的时候怎么按列读取-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java POI读取Excel的时候怎么按列读取

2016-03-06 10:18:25 9757 1

Excel结构如图所示,我现在有两行数据,我要把这两行数据给对应起来.第一行的数据,表示的是一个分类,第二行是这个分类下的子类.比如性别分类有男和女,年龄段分类有青年,中年,老年.后面依次.我现在读取Excel的时候,怎么才能把他们对应起来呢.我的想法是按照列读取,但是POI好像没有按列读取的方法.或者谁有更好的建议

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:54:09
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Random;
    
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class TestPOIP1Title {
        public static void main(String[] args) throws Exception {
            
            String pathname = "E:\\files\\title.xlsx";
            File file = new File(pathname);
            InputStream in = new FileInputStream(file);
            //得到整个excel对象
            XSSFWorkbook excel = new XSSFWorkbook(in);
            //获取整个excel有多少个sheet
            int sheets = excel.getNumberOfSheets();
            //便利第一个sheet
            Map<String,String> colMap = new HashMap<String, String>();
            for(int i = 0 ; i < sheets ; i++ ){
                XSSFSheet sheet = excel.getSheetAt(i);
                if(sheet == null){
                    continue;
                }
                int mergedRegions = sheet.getNumMergedRegions();
                XSSFRow row2 = sheet.getRow(0);
                Map<Integer,String> category = new HashMap<Integer, String>();
                for(int j = 0 ; j < mergedRegions; j++ ){
                    CellRangeAddress rangeAddress = sheet.getMergedRegion(j);
                    int firstRow = rangeAddress.getFirstColumn();
                    int lastRow = rangeAddress.getLastColumn();
                    category.put(rangeAddress.getFirstColumn(), rangeAddress.getLastColumn()+"-"+row2.getCell(firstRow).toString());
                }
                //便利每一行
                for( int rowNum = 1 ; rowNum <= sheet.getLastRowNum() ; rowNum++ ){
                    System.out.println();
                    XSSFRow row = sheet.getRow(rowNum);
                    if(row == null){
                        continue;
                    }
                    short lastCellNum = row.getLastCellNum();
                    String cate = "";
                    Integer maxIndex = 0;
                    for( int col = row.getFirstCellNum() ; col < lastCellNum ; col++ ){
                        XSSFCell cell = row.getCell(col);
                        if(cell == null ){
                            continue;
                        }
                        if("".equals(cell.toString())){
                            continue;
                        }
                        int columnIndex = cell.getColumnIndex();
                        String string = category.get(columnIndex);
                        if(string != null && !string.equals("")){
                            String[] split = string.split("-");
                            cate = split[1];
                            maxIndex = Integer.parseInt(split[0]);
                            System.out.println(cate+"<-->"+cell.toString());
                        }else {
                            //如果当前便利的列编号小于等于合并单元格的结束,说明分类还是上面的分类名称
                            if(columnIndex<=maxIndex){
                                System.out.println(cate+"<-->"+cell.toString());
                            }else {
                                System.out.println("分类未知"+"<-->"+cell.toString());
                            }
                        }
                    }
                }
            }
        }
    }

    运行的结果如下:
    3

    0 0
相关问答

1

回答

java用Poi读取excel时特别慢,该怎么解决呢:报错

2020-06-07 20:30:55 2033浏览量 回答数 1

0

回答

请问java中Character操作与char原始类型操作在高并发的业务上对性能有什么影响?

2021-11-07 11:56:35 150浏览量 回答数 0

0

回答

请问在java程序中使用内存存储临时文件数据,是否会影响java应用系统整体性能?

2021-11-07 11:56:35 304浏览量 回答数 0

0

回答

请问将java集合TreeSet对象转换为字符串对象,有没有性能最优的做法?

2021-11-07 11:56:35 186浏览量 回答数 0

0

回答

Java性能调优,java中按名称获取XML节点性能最快的做法是什么?

2021-11-07 21:31:51 232浏览量 回答数 0

0

回答

请问将java集合TreeSet对象中的数据进行拆分操作,有没有性能最优的做法?

2021-11-07 11:56:35 228浏览量 回答数 0

0

回答

请问java中访问TreeSet对象中特定元素的性能最有效方法是什么?

2021-11-12 17:22:45 149浏览量 回答数 0

0

回答

请问使用java将多维数组转字符串性能最优的做法是什么?

2021-11-07 11:58:20 149浏览量 回答数 0

0

回答

请问在java中将XML文档写入文件性能最快的做法是什么?

2021-11-07 11:58:19 272浏览量 回答数 0

0

回答

请问在java中将XML文档转换为流对象性能最快的做法是什么?

2021-11-07 11:58:19 182浏览量 回答数 0
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
文章
问答
问答排行榜
最热
最新
相关电子书
更多
01-02.pd...[123ya].1495094335.pdf
立即下载
01-02.pd...[123ya].1495094003.pdf
立即下载
yqdh_58c13113597...1510470399.pdf
立即下载