Excel文件解析(Java)

06-27 991阅读

一、概述

        在应用程序的开发过程中,经常需要使用 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包依赖

    Excel文件解析(Java)

    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 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]