您的位置:

POI操作Excel详解

一、POI操作Excel方法

POI(Poor Obfuscation Implementation)是一个用于处理Microsoft Office文档的Java API。在处理Excel中的数据时,POI受到广泛应用,以下是POI操作Excel的基本方法:

File file = new File("example.xlsx");
Workbook workbook = WorkbookFactory.create(file); // 读取Excel文件

Sheet sheet = workbook.getSheetAt(0); // 获取第一个sheet

Row row = sheet.getRow(0); // 获取第一行

Cell cell = row.getCell(0); // 获取第一个单元格

cell.setCellValue("Hello World"); // 设置第一个单元格内容

FileOutputStream out = new FileOutputStream(file); // 创建输出流

workbook.write(out); // 将数据写入Excel文件

out.close(); // 关闭输出流

以上代码实现了使用POI读取Excel文件、获取单元格并设置单元格内容,最后将修改后的数据写入Excel文件。

二、POI操作Excel单元格样式丢失

在使用POI进行Excel操作时,有时会遇到单元格样式丢失的问题,下面是解决这个问题的方法:

Cell cell = row.getCell(0);
CellStyle style = cell.getCellStyle(); // 获取单元格样式

cell = row.createCell(0); // 创建新单元格
cell.setCellValue("Hello World"); // 设置单元格内容
cell.setCellStyle(style); // 设置单元格样式

以上代码获取了单元格的样式,然后在创建新的单元格时将样式设置为旧单元格的样式,解决了单元格样式丢失的问题。

三、POI操作Excel导入数据库

在对Excel数据进行处理后,有时需要将数据导入数据库进行后续操作,以下是将POI解析出的Excel数据导入MySQL数据库的示例代码:

File file = new File("example.xlsx");
Workbook workbook = WorkbookFactory.create(file); // 读取Excel文件
Sheet sheet = workbook.getSheetAt(0); // 获取第一个sheet

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
Statement stmt = conn.createStatement();
stmt.executeUpdate("CREATE TABLE IF NOT EXISTS example (id INT PRIMARY KEY, name VARCHAR(20))");

String sql = "INSERT INTO example (id, name) VALUES (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);

for (Row row : sheet) {
    if (row.getRowNum() == 0) {
        continue;
    }
    pstmt.setInt(1, (int) row.getCell(0).getNumericCellValue());
    pstmt.setString(2, row.getCell(1).getStringCellValue());
    pstmt.executeUpdate();
}

pstmt.close();
stmt.close();
conn.close();

以上代码首先连接数据库并创建表,之后遍历Excel数据并将数据插入到数据库中。

四、POI操作Excel表格合并行

有时需要将相邻单元格合并为一行,以下是合并表格行的示例代码:

Sheet sheet = workbook.getSheetAt(0);

CellRangeAddress region = new CellRangeAddress(0, 2, 0, 0); // 合并第1列从第1行到第3行的单元格
sheet.addMergedRegion(region);

以上代码将单元格从第1行到第3行的第1列合并为一行。

五、POI操作Excel读取第一列

有时需要读取Excel表格中的特定列,以下是读取第一列的示例代码:

Sheet sheet = workbook.getSheetAt(0);

for (Row row : sheet) {
    Cell cell = row.getCell(0);
    if (cell != null) {
        System.out.println(cell.getStringCellValue());
    }
}

以上代码遍历第一个sheet的所有行并读取第一列的数据。

六、POI操作Excel基础用法详解

在使用POI进行Excel操作时,还有一些基础用法需要了解:

  • Workbook:代表整个Excel文档,可以通过WorkbookFactory来创建。
  • Sheet:代表Excel文档中的一个sheet。
  • Row:代表一个sheet中的一行。
  • Cell:代表一行中的一个单元格。
  • CellStyle:代表单元格样式。

其他一些常用的方法包括:

  • setColumnWidth(int columnIndex, int width):设置列宽。
  • getFont(int fontIndex):获取字体。
  • setBorderBottom(BorderStyle border):设置边框样式。
  • setFillForegroundColor(short bgColor):设置填充颜色。

七、POCO操作

POCO(Plain Old CLR Object)是面向对象编程的一种方式,以下是使用POCO操作Excel的示例代码:

@Data // lombok注解,自动生成getter、setter方法等代码
public class Person {
    @ExcelProperty(value = {"用户id"}, index = 0) // easyexcel注解,设置Excel中的列名和顺序
    private Long id;

    @ExcelProperty(value = {"用户名"}, index = 1)
    private String username;

    @ExcelProperty(value = {"状态"}, index = 2)
    private Integer status;
}

File file = new File("example.xlsx");
EasyExcel.read(file, Person.class, new ReadListener<Person>() {
    // 实现方法
}).sheet().doRead();

以上代码使用EasyExcel库实现了使用POCO读取Excel数据,将Excel中的数据映射到Person类。

八、POI操作PPT

除了Excel,POI也可以用于操作PowerPoint文档,以下是POI操作PPT的示例代码:

File file = new File("example.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file)); // 读取PPT文件
XSLFSlide slide = ppt.createSlide(); // 创建新slide

XSLFTextBox box = slide.createTextBox(); // 创建文本框
box.setAnchor(new Rectangle(50, 50, 300, 100)); // 设置文本框大小和位置
box.setText("Hello World!"); // 设置文本框内容

FileOutputStream out = new FileOutputStream(file); // 创建输出流
ppt.write(out); // 将修改后的数据写入PPT文件
out.close(); // 关闭输出流

以上代码实现了使用POI读取PPT文件,创建新的slide,添加文本框并设置内容,最后将修改后的数据写入PPT文件。

九、POI操作DOC

POI也可以用于对Word文档进行操作,以下是POI操作DOC的示例代码:

File file = new File("example.docx");
XWPFDocument doc = new XWPFDocument(new FileInputStream(file)); // 读取DOC文件

XWPFParagraph para = doc.createParagraph(); // 创建新段落
XWPFRun run = para.createRun(); // 创建run
run.setText("Hello World!"); // 设置文本内容

FileOutputStream out = new FileOutputStream(file); // 创建输出流
doc.write(out); // 将修改后的数据写入DOC文件
out.close(); // 关闭输出流

以上代码实现了使用POI读取Word文档,创建新段落,添加run并设置内容,最后将修改后的数据写入Word文档。

十、POI操作PDF

POI也可以用于对PDF文档进行操作,以下是POI操作PDF的示例代码:

File file = new File("example.pdf");
PDDocument doc = PDDocument.load(file); // 读取PDF文件

PDPage page = doc.getPage(0); // 获取第一页

PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12); // 设置字体和字号
contentStream.beginText(); // 开始文本操作
contentStream.newLineAtOffset(100, 700); // 设置文本起始位置
contentStream.showText("Hello World!"); // 显示文本
contentStream.endText(); // 结束文本操作
contentStream.close(); // 关闭contentStream

doc.save(file); // 将修改后的数据写入PDF文件
doc.close(); // 关闭doc

以上代码实现了使用POI读取PDF文件,获取第一页并添加文本,最后将修改后的数据写入PDF文件。