Excel文件解析(Java)
一、概述
在应用程序的开发过程中,经常需要使用 Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出)。
在Java技术生态圈中,可以进行Excel文件处理的主流技术包括: Apache POI 、JXL、Alibaba EasyExcel等。
Apache POI基于 DOM方式进行解析,将文件直接加载内存,所以速度较快,适合 Excel文件数据量不︰大的应用场景。JXL只支持Excel 2003以下版本,所以不太常见。
Alibaba EasyExcel采用逐行读取的解析模式,将每一行的解析结果以观察者的模式通知处理(AnalysisEventListener),所以比较适合数据体量较大的Excel文件解析。
二、Apache POl
Apache POI 是用Java编写的免费开源的跨平台的 Java API , Apache POI提供给Java程序对Microsoft Office格式档案进行读写功能的API开源类库。
它分别提供对不同格式文件的解析:
- HSSF-提供读写Microsoft Excel格式档案的功能。
- XSSF-提供读写Microsoft Excel OOXML格式档案的功能。
- HWPF-提供读写Microsoft Word格式档案的功能。
- HSLF-提供读写Microsoft PowerPoint格式档案的功能。
- HDGF-提供读写Microsoft Visio格式档案的功能。
三、XSSF解析Excel文件
HSSF 用于解析旧版本(*.xls)Excel文件,由于旧版本的Excel文件只能存在65535行数据,所以目前已经不常用。所以目前主要采用XSSF 进行新版本(*.xlsx) Exce文件的解析。
添加Jar包依赖
1.Workbook (Excel文件)
workbook接口代表一个Excel 文件,用于创建或加载(解析) Excel文件。常见实现类是XSSFWorkbook 。
创建Excel 文件
try (workbook workbook = new XSSFWorkbook(); Fileoutputstream fos = new Fileoutputstream("c: \|test\|temp.xlsx")) { workbook.write(fos); catch (IOException e) {e.printstackTrace();
加载(解析)Exce1文件
//输入流 FileInputstream fis = new FileInputstream(" c:\\test\\ip.xlsx"); // Excel文件对象 workbook workbook = new XSSFWorkbook(fis);
2.Sheet(工作簿)
通过workbook 来进行工作簿sheet对象的获取或创建。
创建工作表
//按照默认名称创建工作表 sheet sheet1 = workbook.createsheet(); //按照自定义名称创建工作表 sheet sheet2 = workbook.createsheet("这是一个新表");
获取工作表
//按照工作表下标获取sheet sheet sheeto1 = workbook.getsheetAt(0); //按照工作表名称获取sheet sheet sheet02 = workbook.getsheet("sheete");
获取工作表的数量
int n = workbook.getNumberofsheets();
3.Row(数据行)
通过Sheet来进行数据行Row对象的获取或创建。
创建数据行
Row row = sheet.createRow(o);
获取首行下标
int first = sheet.getFirstRowNum();
获取尾行下标
int first = sheet.getFirstRowNum();
根据下标获取指定行
Row row = sheet.getRow(o);
遍历所有行
for( Row row : sheet) { system.out.println( row); }
遍历指定区域行
for (int i = 1; i