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();
        }
    }
}
相关推荐
DolphinScheduler社区3 天前
DolphinScheduler 3.3.2 如何调用 DataX 3.0 + SeaTunnel 2.3.12?附 Demo演示!
java·spark·apache·海豚调度·大数据工作流调度
YaBingSec3 天前
玄机网络安全靶场:Apache HTTPD 解析漏洞(CVE-2017-15715)WP
java·笔记·安全·web安全·php·apache
SuperherRo4 天前
服务攻防-中间件安全&Apache&Tomcat&Jetty&Weblogic&AJP协议&反序列化&CVE漏洞
中间件·tomcat·apache·jetty·weblogic
回忆2012初秋4 天前
时序库.net平台下的推荐 SonnetDB,一文分析清除他与Apache IoTDB的区同
apache·iotdb
家有娇妻张兔兔5 天前
Apache POI 导出 Word 踩坑实录:Word 分栏为什么做不好左右平铺
c#·word·apache·poi·分栏
HashData酷克数据5 天前
官宣:Apache Cloudberry (Incubating) 2.1.0 正式发布!
apache
weixin_394758035 天前
直播间小程序码生成问题修复代码清单
android·小程序·apache
YaBingSec6 天前
玄机靶场—Apache-druid(CVE-2021-25646) WP
java·开发语言·笔记·安全·php·apache
回忆2012初秋8 天前
.NET 时序数据操作实战:Apache IoTDB连接与 CRUD 完全指南
.net·apache·iotdb
weixin_430750938 天前
部署FreeRadius+php+apache+mariaDB+daloradius 实现认证计费功能
php·apache·mariadb·daloradius·freeradius