当前位置: 首页 > article >正文

Apache POI

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

1.1 依赖管理

<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 文件并写入数据的示例:

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 文件的示例:

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 设置单元格样式

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

 
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 文档并添加文本的示例:

 
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 文档的示例代码如下:

 
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 演示文稿的示例:

 
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 演示文稿

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();
        }
    }
}


http://www.kler.cn/news/355585.html

相关文章:

  • C#从零开始学习(基本语法概念)(2)
  • 腐蚀膨胀预处理
  • Java - 使用AOP+SpEL基于DB中的用户ID自动补全用户姓名
  • 【网络安全】盲SSRF+CSP绕过实现XSS
  • 使用ROS资源编排一键部署LNMP建站环境,手动整理教程
  • @PostConstruct和afterPropertiesSet方法执行多次的原因
  • DirectX 11 和 Direct3D 11 的关系
  • WordPress官方发布“新”插件“SCF”(安全自定义字段)
  • 【C++基础篇】——逐步了解C++
  • 【ROS2】订阅手柄数据,发布运动命令
  • 小程序如何根据用户的不同显示不同导航栏
  • Docker可视化管理工具DockerUI的使用
  • go压缩的使用
  • axios的使用
  • Java基础概览和常用知识(九)
  • 鸿蒙网络编程系列11-使用HttpRequest上传文件到服务端示例
  • Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found
  • LabVIEW提高开发效率技巧----减少UI更新频率
  • Python知识点:基于Python技术,如何使用AirSim进行无人机模拟
  • 1.docker-compose