Apache POI

Apache POI 是一个强大的 Java 库,用于读写 Microsoft Office 文件格式,包括 Excel、Word 和 PowerPoint 等。它允许 Java 应用程序直接创建、读取和修改这些文档。

1.1 依赖管理

XML 复制代码
<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version> <!-- 检查最新版本 -->
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>5.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.1.2</version>
    </dependency>
</dependencies>
  1. poi:这个依赖是处理旧版 Excel 文件(.xls)的核心库。如果你只处理 .xls 文件,且不需要处理 .xlsx 文件,则只需导入这个依赖。

  2. poi-ooxml:这个依赖是处理新版 Excel 文件(.xlsx)的核心库。如果你只处理 .xlsx 文件,则必须导入这个依赖。如果你同时处理 .xls 和 .xlsx 文件,则需要导入这两个依赖。

  3. poi-ooxml-schemas:这个依赖是处理一些特定的 Excel 文件功能所需的。例如,处理复杂的 Excel 文档结构、图表等。如果你只需要基本的读写功能,通常可以不导入这个依赖。

  4. xmlbeans:这个库用于处理 XML 数据,POI 使用它来解析和生成 .xlsx 文件。如果你处理 .xlsx 文件,通常需要导入这个依赖。

2. 操作 Excel 文件

2.1 创建 Excel 文件

下面是创建一个简单 Excel 文件并写入数据的示例:

java 复制代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class CreateExcel {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook(); // 创建一个工作簿
        Sheet sheet = workbook.createSheet("示例表格"); // 创建一个工作表
        
        Row row = sheet.createRow(0); // 创建第一行
        Cell cell = row.createCell(0); // 创建第一个单元格
        cell.setCellValue("你好,Apache POI!"); // 设置单元格值
        
        // 写入到文件
        try (FileOutputStream fileOut = new FileOutputStream("workbook.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close(); // 关闭工作簿
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

2.2 读取 Excel 文件

下面是读取 Excel 文件的示例:

java 复制代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class ReadExcel {
    public static void main(String[] args) {
        try (FileInputStream file = new FileInputStream("workbook.xlsx");
             Workbook workbook = new XSSFWorkbook(file)) {

            Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
            Row row = sheet.getRow(0); // 获取第一行
            Cell cell = row.getCell(0); // 获取第一个单元格
            System.out.println("单元格值: " + cell.getStringCellValue()); // 输出单元格值

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.3 设置单元格样式

可以设置单元格的样式,比如字体、边框、背景颜色等:

复制代码
java 复制代码
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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

public class StyledExcel {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("样式示例");

        // 创建单元格样式
        CellStyle style = workbook.createCellStyle();
        style.setBorderTop(BorderStyle.THIN);
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);

        // 设置字体
        Font font = workbook.createFont();
        font.setBold(true);
        font.setColor(IndexedColors.BLUE.getIndex());
        style.setFont(font);

        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("带样式的单元格");
        cell.setCellStyle(style); // 应用样式

        try (FileOutputStream fileOut = new FileOutputStream("styled_workbook.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3. 操作 Word 文档

3.1 创建 Word 文档

创建一个简单的 Word 文档并添加文本的示例:

复制代码
java 复制代码
import org.apache.poi.xwpf.usermodel.*;

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

public class CreateWord {
    public static void main(String[] args) {
        XWPFDocument document = new XWPFDocument();

        // 添加段落
        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setText("你好,Apache POI 的 Word 示例!");
        run.setBold(true);
        
        try (FileOutputStream out = new FileOutputStream("document.docx")) {
            document.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                document.close(); // 关闭文档
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3.2 读取 Word 文档

读取 Word 文档的示例代码如下:

复制代码
java 复制代码
import org.apache.poi.xwpf.usermodel.*;

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

public class ReadWord {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("document.docx");
             XWPFDocument document = new XWPFDocument(fis)) {

            for (XWPFParagraph paragraph : document.getParagraphs()) {
                System.out.println(paragraph.getText()); // 输出段落内容
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 操作 PowerPoint 演示文稿

4.1 创建 PowerPoint 演示文稿

创建一个简单的 PowerPoint 演示文稿的示例:

复制代码
java 复制代码
import org.apache.poi.xslf.usermodel.*;

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

public class CreatePowerPoint {
    public static void main(String[] args) {
        XMLSlideShow ppt = new XMLSlideShow();

        // 创建一个幻灯片
        XSLFSlide slide = ppt.createSlide();

        // 添加文本框
        XSLFTextBox textBox = slide.addTextBox();
        textBox.setText("你好,Apache POI 的 PowerPoint 示例!");
        
        try (FileOutputStream out = new FileOutputStream("presentation.pptx")) {
            ppt.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ppt.close(); // 关闭演示文稿
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4.2 读取 PowerPoint 演示文稿

java 复制代码
import org.apache.poi.xslf.usermodel.*;

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

public class ReadPowerPoint {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("presentation.pptx");
             XMLSlideShow ppt = new XMLSlideShow(fis)) {

            for (XSLFSlide slide : ppt.getSlides()) {
                for (XSLFShape shape : slide.getShapes()) {
                    if (shape instanceof XSLFTextShape) {
                        XSLFTextShape textShape = (XSLFTextShape) shape;
                        System.out.println(textShape.getText()); // 输出文本框内容
                    }
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
相关推荐
hwscom5 小时前
如何永久解决Apache Struts文件上传漏洞
java·服务器·struts·web安全·apache
白开水2336 小时前
Apache RocketMQ 5.1.3安装部署文档
apache·rocketmq
s甜甜的学习之旅1 天前
Apache POI练习代码
apache
是小崔啊1 天前
开源轮子 - Apache Common
java·开源·apache
程序猿阿伟1 天前
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
java·spark-ml·apache
开心工作室_kaic2 天前
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
开发语言·数据库·vue.js·php·apache
cr.sheeper2 天前
Vulnhub靶场Apache解析漏洞
网络安全·apache
ccc_9wy3 天前
Apache Solr RCE(CVE-2017-12629)--vulhub
apache·solr·lucene·burp suite·vulhub·远程命令执行漏洞rce·cve-2017-12629
ccc_9wy3 天前
Apache Solr RCE(CVE-2019-0193)--vulhub
网络安全·apache·solr·lucene·vulhub·cve-2019-0193·远程命令执行漏洞rce
casual_clover3 天前
搭建一个简单的Web服务器(Apache2.4)
服务器·apache