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>
-
poi
:这个依赖是处理旧版 Excel 文件(.xls)的核心库。如果你只处理 .xls 文件,且不需要处理 .xlsx 文件,则只需导入这个依赖。 -
poi-ooxml
:这个依赖是处理新版 Excel 文件(.xlsx)的核心库。如果你只处理 .xlsx 文件,则必须导入这个依赖。如果你同时处理 .xls 和 .xlsx 文件,则需要导入这两个依赖。 -
poi-ooxml-schemas
:这个依赖是处理一些特定的 Excel 文件功能所需的。例如,处理复杂的 Excel 文档结构、图表等。如果你只需要基本的读写功能,通常可以不导入这个依赖。 -
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();
}
}
}