Java工具库系列(十八):Apache POI

Java工具库系列(十八):Apache POI

在Java开发中,处理Microsoft Office文档(如Excel、Word)是一个常见的需求。Apache POI 是一个强大的库,专门用于读写Microsoft Office格式的文件,特别是Excel文件。本文将介绍 Apache POI 的核心功能及其使用方法,帮助你在项目中更高效地处理Office文档。

一、Apache POI 简介

Apache POI(Poor Obfuscation Implementation)是Apache软件基金会的一个项目,提供了API,用于读写基于OLE2和OOXML的Microsoft Office文档。POI的主要组件包括:

  • POIFS(Poor Obfuscation Implementation File System):处理OLE2文件系统。
  • HSSF(Horrible Spreadsheet Format):处理Excel 97-2003格式。
  • XSSF(XML Spreadsheet Format):处理Excel 2007及更高版本格式。
  • HWPF(Horrible Word Processor Format):处理Word 97-2003格式。
  • XWPF(XML Word Processor Format):处理Word 2007及更高版本格式。
二、Apache POI 的安装

要在项目中使用Apache POI,你需要在项目的构建工具中添加POI的依赖。例如,如果你使用Maven,你可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>5.0.2</version>
</dependency>

对于Gradle,你可以添加以下内容到 build.gradle 文件:

implementation 'org.apache.poi:poi-ooxml:5.0.0'
implementation 'org.apache.poi:poi:5.0.0'
implementation 'org.apache.xmlbeans:xmlbeans:5.0.2'
三、Apache POI 的核心功能
1. 处理Excel文件(HSSF和XSSF)

Apache POI 提供了HSSF和XSSF用于处理Excel文件。以下是一些基本操作示例:

创建Excel文件
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class CreateExcelExample {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, Apache POI!");

        try (FileOutputStream fos = new FileOutputStream("example.xlsx")) {
            workbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
读取Excel文件
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;

public class ReadExcelExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.xlsx")) {
            Workbook workbook = new XSSFWorkbook(fis);
            Sheet sheet = workbook.getSheetAt(0);
            Row row = sheet.getRow(0);
            Cell cell = row.getCell(0);

            System.out.println(cell.getStringCellValue()); // 输出 "Hello, Apache POI!"
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2. 处理Word文件(HWPF和XWPF)

Apache POI 提供了HWPF和XWPF用于处理Word文件。以下是一些基本操作示例:

创建Word文件
import org.apache.poi.xwpf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class CreateWordExample {
    public static void main(String[] args) {
        XWPFDocument document = new XWPFDocument();
        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setText("Hello, Apache POI!");

        try (FileOutputStream fos = new FileOutputStream("example.docx")) {
            document.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
读取Word文件
import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.IOException;

public class ReadWordExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.docx")) {
            XWPFDocument document = new XWPFDocument(fis);
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                System.out.println(paragraph.getText());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
3. 操作单元格样式和格式

你可以使用Apache POI设置单元格的样式和格式。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class CellStyleExample {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Styled Cell");
        cell.setCellStyle(style);

        try (FileOutputStream fos = new FileOutputStream("styled_example.xlsx")) {
            workbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4. 操作表格和图表

Apache POI 支持在Excel中创建和操作表格和图表。

创建表格
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class TableExample {
    public static void main(String[] args) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Sheet1");

        for (int i = 0; i < 5; i++) {
            Row row = sheet.createRow(i);
            for (int j = 0; j < 5; j++) {
                Cell cell = row.createCell(j);
                cell.setCellValue((i + 1) * (j + 1));
            }
        }

        XSSFTable table = sheet.createTable();
        table.setDisplayName("Table1");
        table.setCellReferences(new CellRangeAddress(0, 4, 0, 4));

        try (FileOutputStream fos = new FileOutputStream("table_example.xlsx")) {
            workbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
创建图表
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.xssf.usermodel.charts.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class ChartExample {
    public static void main(String[] args) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Sheet1");

        Row row = sheet.createRow(0);
        row.createCell(0).setCellValue("Category");
        row.createCell(1).setCellValue("Value");

        for (int i = 1; i < 6; i++) {
            row = sheet.createRow(i);
            row.createCell(0).setCellValue("Category " + i);
            row.createCell(1).setCellValue(i);
        }

        XSSFDrawing drawing = sheet.createDrawingPatriarch();
        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 7, 10, 20);

        XSSFChart chart = drawing.createChart(anchor);
        XSSFChartLegend legend = chart.getOrCreateLegend();
        legend.setPosition(LegendPosition.TOP_RIGHT);

        LineChartData data = chart.getChartDataFactory().createLineChartData();

        ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
        ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);
        leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);

        ChartDataSource<String> xs = DataSources.fromStringCellRange(sheet, new CellRangeAddress(1, 5, 0, 0));
        ChartDataSource<Number> ys = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 5, 1, 1));

        data.addSeries(xs, ys);
        chart.plot(data);

        try (FileOutputStream fos = new

 FileOutputStream("chart_example.xlsx")) {
            workbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
四、总结

Apache POI 是一个功能强大的库,可以帮助开发者在Java项目中处理Microsoft Office文档。无论是创建和读取Excel文件,还是处理Word文档,POI都提供了丰富的API供你使用。希望本文能帮助你更好地理解和使用Apache POI。

下一篇文章将继续探讨Java工具库的其他强大功能,敬请期待!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿里渣渣java研发组-群主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值