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();
        }
    }
}
相关推荐
木古古189 小时前
使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题
前端·chrome·apache
疯一样的码农17 小时前
Apache Maven简介
java·maven·apache
疯一样的码农19 小时前
Apache Maven 标准文件目录布局
java·maven·apache
千羽星弦19 小时前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
high20111 天前
【Apache Paimon】-- 5 -- Flink 向 Paimon 表写入数据
linux·flink·apache·paimon
.Ayang2 天前
【vulhub】Apache 多后缀解析漏洞(apache_parsing_vulnerability)
网络·安全·web安全·网络安全·系统安全·apache·网络攻击模型
Evaporator Core4 天前
Apache Doris:深度优化与最佳实践
apache
hzc1910255 天前
apache2配置多站点
apache·网站
深鱼~5 天前
打造专业问答社区:Windows部署Apache Answer结合cpolar实现公网访问
windows·apache
დ旧言~6 天前
【网络】网络层——IP协议
服务器·网络·网络协议·tcp/ip·php·apache