安装和配置

  1. 下载POI库:访问Apache POI的官方网站(https://poi.apache.org/)下载POI库的最新版本。

  2. 配置POI库到你的Java项目中:将下载的POI库的JAR文件添加到你的项目的类路径中。

  3. 设置依赖项和构建工具:如果你使用构建工具(如Maven或Gradle),则需要在项目的构建文件中添加POI库的依赖项。

使用POI

读取操作

import org.apache.poi.ss.usermodel.*;
​
public class ExcelReader {
    public static void main(String[] args) {
        try {
            // 创建Workbook对象
            Workbook workbook = WorkbookFactory.create(new File("path/to/your/excel/file.xlsx"));
​
            // 获取第一个Sheet对象
            Sheet sheet = workbook.getSheetAt(0);
​
            // 遍历每一行
            for (Row row : sheet) {
                // 遍历每个单元格
                for (Cell cell : row) {
                    // 读取单元格数据
                    CellType cellType = cell.getCellType();
                    if (cellType == CellType.STRING) {
                        String cellValue = cell.getStringCellValue();
                        System.out.println(cellValue);
                    } else if (cellType == CellType.NUMERIC) {
                        double cellValue = cell.getNumericCellValue();
                        System.out.println(cellValue);
                    }
                    // 其他数据类型的处理
                }
            }
​
            // 关闭Workbook对象
            workbook.close();
        } catch (IOException | InvalidFormatException e) {
            e.printStackTrace();
        }
    }
}

写入操作

import org.apache.poi.ss.usermodel.*;
​
public class ExcelWriter {
    public static void main(String[] args) {
        // 创建Workbook对象
        Workbook workbook = new XSSFWorkbook();
​
        // 创建Sheet对象
        Sheet sheet = workbook.createSheet("Sheet1");
​
        // 创建Row对象
        Row row = sheet.createRow(0);
​
        // 创建Cell对象并写入数据
        Cell cell1 = row.createCell(0);
        cell1.setCellValue("Hello");
​
        Cell cell2 = row.createCell(1);
        cell2.setCellValue("World");
​
        // 保存Workbook到文件
        try {
            FileOutputStream fileOut = new FileOutputStream("path/to/save/excel/file.xlsx");
            workbook.write(fileOut);
            fileOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
​
        // 关闭Workbook对象
        workbook.close();
    }
}

样式和格式

import org.apache.poi.ss.usermodel.*;
​
public class ExcelStyling {
    public static void main(String[] args) {
        // 创建Workbook对象
        Workbook workbook = new XSSFWorkbook();
​
        // 创建Sheet对象
        Sheet sheet = workbook.createSheet("Sheet1");
​
        // 创建Row对象
        Row row = sheet.createRow(0);
​
        // 创建Cell对象并写入数据
        Cell cell = row.createCell(0);
        cell.setCellValue("Styled Cell");
​
        // 创建样式对象
        CellStyle cellStyle = workbook.createCellStyle();
​
        // 设置字体
        Font font = workbook.createFont();
        font.setFontName("Arial");
        font.setFontHeightInPoints((short) 12);
        font.setBold(true);
        cellStyle.setFont(font);
​
        // 设置边框和背景色
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderTop(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
​
        // 设置数据格式
        DataFormat dataFormat = workbook.createDataFormat();
        cellStyle.setDataFormat(dataFormat.getFormat("0.00"));
​
        // 应用样式到单元格
        cell.setCellStyle(cellStyle);
​
        // 保存Workbook到文件
        try {
            FileOutputStream fileOut = new FileOutputStream("path/to/save/excel/file.xlsx");
            workbook.write(fileOut);
            fileOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
​
        // 关闭Workbook对象
        workbook.close();
    }
}

图表操作

import org.apache.poi.ss.usermodel.*;
​
public class ExcelChart {
    public static void main(String[] args) {
        // 创建Workbook对象
        Workbook workbook = new XSSFWorkbook();
​
        // 创建Sheet对象
        Sheet sheet = workbook.createSheet("Sheet1");
​
        // 创建数据行和单元格
        Row row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("Category");
        row1.createCell(1).setCellValue("Value 1");
        row1.createCell(2).setCellValue("Value 2");
​
        Row row2 = sheet.createRow(1);
        row2.createCell(0).setCellValue("A");
        row2.createCell(1).setCellValue(10);
        row2.createCell(2).setCellValue(20);
​
        Row row3 = sheet.createRow(2);
        row3.createCell(0).setCellValue("B");
        row3.createCell(1).setCellValue(15);
        row3.createCell(2).setCellValue(25);
​
        // 创建图表对象
        Drawing<?> drawing = sheet.createDrawingPatriarch();
        ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 1, 10, 15);
        Chart chart = drawing.createChart(anchor);
​
        // 创建数据源
        DataRange dataRange = sheet.createDataRange(new CellRangeAddress(0, 2, 0, 2));
        chart.displayBlanksAs(DisplayBlanks.GAP);
        chart.plot(dataRange);
​
        // 创建数据系列
        ChartDataSource<Number> category = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 2, 0, 0));
        ChartDataSource<Number> values1 = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 2, 1, 1));
        ChartDataSource<Number> values2 = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 2, 2, 2));
        DataSeries series1 = chart.addSeries(category, values1);
        DataSeries series2 = chart.addSeries(category, values2);
​
        // 设置图表样式和标题
        ChartAxis bottomAxis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
        ChartAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);
        chart.setTitleText("Sample Chart");
        chart.plot(dataRange, bottomAxis, leftAxis);
​
        // 保存Workbook到文件
        try {
            FileOutputStream fileOut = new FileOutputStream("path/to/save/excel/file.xlsx");
            workbook.write(fileOut);
            fileOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
​
        // 关闭Workbook对象
        workbook.close();
    }
}

以上示例代码提供了基本的操作和功能示例,你可以根据你的具体需求进行修改和扩展。