前言
在应用程序开发过程中,经常需要使用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();
}
}
}
版权归原作者 鸣筝鸣筝 所有, 如有侵权,请联系我们删除。