您的位置:

Apache POI——轻松操作Office文档

一、简介

Apache POI是一个用于创建、读取和操作Microsoft Office格式文件的Java库。它支持的文件格式包括Excel、Word和PowerPoint等。通过Apache POI,我们可以轻松地读取、写入或修改Excel文件、Word文档等Microsoft Office格式文件。

Apache POI的核心API是HSSF(Horrible Spreadsheet Format)、XSSF(XML Spreadsheet Format)和SXSSF(Streaming Usermodel API)。它们支持不同的Excel格式文件,可以根据实际需求进行选择。另外,Apache POI还支持对word文档进行读写操作。下面将详细介绍如何使用Apache POI进行Office文档的操作。

二、读取Excel文件

对于读取Excel文件,Apache POI提供了HSSF和XSSF两个核心API。下面以HSSF为例进行介绍。

1. 读取Excel文件中的数据

public static void readExcelFile(String filePath) throws IOException {
    FileInputStream fileInputStream = new FileInputStream(filePath);
    Workbook workbook = new HSSFWorkbook(fileInputStream);

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

    for (int i = 0; i <= sheet.getLastRowNum(); i++) {
        Row row = sheet.getRow(i);
        for (int j = 0; j < row.getLastCellNum(); j++) {
            Cell cell = row.getCell(j);
            System.out.print(cell.getStringCellValue() + "\t");
        }
        System.out.println();
    }
    fileInputStream.close();
}

上面的代码中,首先通过HSSFWorkbook类读取Excel文件,然后获取第一个sheet。接着,遍历每一行的每一个单元格,并输出其值。

2. 读取Excel文件中的特定数据

public static void readExcelFileWithCondition(String filePath, String condition) throws IOException {
    FileInputStream fileInputStream = new FileInputStream(filePath);
    Workbook workbook = new HSSFWorkbook(fileInputStream);

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

    for (int i = 0; i <= sheet.getLastRowNum(); i++) {
        Row row = sheet.getRow(i);
        for (int j = 0; j < row.getLastCellNum(); j++) {
            Cell cell = row.getCell(j);
            if (cell.getStringCellValue().contains(condition)) {
                System.out.println("找到特定数据:" + cell.getStringCellValue());
                break;
            }
        }
    }
    fileInputStream.close();
}

上面的代码中,通过参数传入特定数据的条件,然后在读取Excel文件时进行判断,如果单元格中包含该条件,则输出该单元格的值。

三、写入Excel文件

对于写入Excel文件,Apache POI同样提供了HSSF和XSSF两个核心API。下面以HSSF为例进行介绍。

1. 写入Excel文件中的数据

public static void writeExcelFile(String filePath) throws IOException {
    Workbook workbook = new HSSFWorkbook();
    Sheet sheet = workbook.createSheet("sheet1");

    Row row = sheet.createRow(0);
    row.createCell(0).setCellValue("姓名");
    row.createCell(1).setCellValue("年龄");
    row = sheet.createRow(1);
    row.createCell(0).setCellValue("张三");
    row.createCell(1).setCellValue(18);

    FileOutputStream fileOutputStream = new FileOutputStream(filePath);
    workbook.write(fileOutputStream);
    fileOutputStream.flush();
    fileOutputStream.close();
}

上面的代码中,首先创建一个HSSFWorkbook对象,然后创建一个名为"sheet1"的sheet。接着,创建第一行,并设置单元格的值。最后,将文件保存到指定路径下。

2. 写入Excel文件中的数据并设置样式

public static void writeExcelFileWithStyle(String filePath) throws IOException{
    Workbook workbook = new HSSFWorkbook();
    Sheet sheet = workbook.createSheet("sheet1");

    // 创建样式
    CellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

    // 第一行
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue("姓名");
    cell.setCellStyle(cellStyle);
    cell = row.createCell(1);
    cell.setCellValue("年龄");
    cell.setCellStyle(cellStyle);

    // 数据行
    row = sheet.createRow(1);
    cell = row.createCell(0);
    cell.setCellValue("张三");
    cell = row.createCell(1);
    cell.setCellValue(18);

    // 保存文件
    FileOutputStream fileOutputStream = new FileOutputStream(filePath);
    workbook.write(fileOutputStream);
    fileOutputStream.flush();
    fileOutputStream.close();
}

上面的代码中,首先创建一个HSSFWorkbook对象,然后创建一个名为"sheet1"的sheet。接着,创建样式并应用到第一行的单元格中。最后,将文件保存到指定路径下。

四、操作Word文档

除了Excel文件,Apache POI还支持对Word文档的读写操作。下面以读取Word文档为例进行介绍。

public static void readWordFile(String filePath) throws IOException {
    FileInputStream fileInputStream = new FileInputStream(filePath);
    XWPFDocument xwpfDocument = new XWPFDocument(fileInputStream);

    List
    paragraphs = xwpfDocument.getParagraphs();

    for (XWPFParagraph paragraph : paragraphs) {
        System.out.println(paragraph.getText());
    }

    fileInputStream.close();
}
   

上面的代码中,首先通过XWPFDocument类读取Word文件,然后获取所有段落,并输出每个段落的内容。

五、小结

通过本文的介绍,我们了解了Apache POI库的基本使用。可以看出,Apache POI大大简化了Office文档的操作,让Java程序员更加轻松地处理Excel、Word等文档。当然,Apache POI还提供了丰富的API,可以满足更加复杂的场景需求。希望本文能够帮助读者更好地掌握Apache POI的使用。