0


Excel文件解析

前言

在应用程序开发过程中,经常需要使用Excel文件来进行数据的导入或导出。所以,在通过Java语言来实现此类需求的时候,往往会面临着Excel文件解析(导入)或生成(导出)。

在Java技术生态圈中,可以进行Excel问价处理的主流技术包括:Apache POI,JXL,Alibaba EasyExcel等。

Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文件数量不大的应用场景。JXL只支持Excel2003以下版本,所以不太常见。

Alibaba EasyExcel采用逐行读取的解析模式,将每一行的解析结果以观察者模式通知处理(AnalyEventListener),所以比较适合数据体量较大的Excel文件解析。

Apache POI

** **Apache POI使用Java编写的免费开源的跨平台的Java API。Apache POI提供给Java程序对Microso Office 格式档案进行读写功能的API开源类库

XSSF解析Excel文件

HSSF用于解析旧版本(*.xls)Excel文件,由于旧版本的Excel文件只能存在65535行数据,所以目前已经不常用,现在主要采用XSSF进行新版本(*.xlsx)Excel文件的解析。

** Workbook**(Excel文件)

Workbook接口代表一个Excel文件,用于创建或加载(解析)Excel文件,常见类是XSSFWorkbook。

Sheet(工作簿)

通过Workbook来进行工作簿Sheet对象的获取或创建

Row(数据行)

通过Sheet来进行数据行Row对象的获取或创建

Cell(单元格)

通过Row来进行单元格Cell对象的获取或创建

代码实现:

//Workbook对象:excel文件
//Sheet对象:电子工作簿
//Row对象:数据行
//Cell对象:单元格

public class Test02 {
    public static void main(String[] args) {
        try (Workbook workbook = new XSSFWorkbook(new FileInputStream("D:\\20220712.xlsx"))) {
            //获取工作簿
            Sheet sheet0=workbook.getSheet("sheet0");
            Iterator<Row> it=sheet0.iterator();
            //遍历工作簿中的所有行
            while(it.hasNext()) {
                Row row=it.next();
                //System.out.println(row);
                Cell cell0=row.getCell(0);//序号
                Cell cell1=row.getCell(1);//部门 
                Cell cell2=row.getCell(2);//姓名
                Cell cell3=row.getCell(3);//职位
                Cell cell4=row.getCell(4);//身份证号
                
                System.out.println("序号:"+(int)cell0.getNumericCellValue());
                System.out.println("部门:"+cell1.getStringCellValue());
                System.out.println("姓名:"+cell2.getStringCellValue());
                System.out.println("职位:"+cell3.getStringCellValue());
                System.out.println("身份证号:"+cell4.getStringCellValue());
                
            }
//            for(Row row:sheet0) {
//                Cell cell0=row.getCell(0);//序号
//                Cell cell1=row.getCell(1);//部门 
//                Cell cell2=row.getCell(2);//姓名
//                Cell cell3=row.getCell(3);//职位
//                Cell cell4=row.getCell(4);//身份证号
//                
//                System.out.println("序号:"+(int)cell0.getNumericCellValue());
//                System.out.println("部门:"+cell1.getStringCellValue());
//                System.out.println("姓名:"+cell2.getStringCellValue());
//                System.out.println("职位:"+cell3.getStringCellValue());
//                System.out.println("身份证号:"+cell4.getStringCellValue());
//            }
//            for(int i=0;i<=sheet0.getLastRowNum();i++) {
//                //得到当前数据行
//                Row row=sheet0.getRow(i);
//                //按照下标获取当前单元格
//                Cell cell0=row.getCell(0);//序号
//                Cell cell1=row.getCell(1);//部门 
//                Cell cell2=row.getCell(2);//姓名
//                Cell cell3=row.getCell(3);//职位
//                Cell cell4=row.getCell(4);//身份证号
//                
//                System.out.println("序号:"+(int)cell0.getNumericCellValue());
//                System.out.println("部门:"+cell1.getStringCellValue());
//                System.out.println("姓名:"+cell2.getStringCellValue());
//                System.out.println("职位:"+cell3.getStringCellValue());
//                System.out.println("身份证号:"+cell4.getStringCellValue());
//                
//            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}
标签: apache java 后端

本文转载自: https://blog.csdn.net/weixin_49137294/article/details/125813017
版权归原作者 鸣筝鸣筝 所有, 如有侵权,请联系我们删除。

“Excel文件解析”的评论:

还没有评论