import org.apache.poi.ss.usermodel.; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFChart; import org.apache.poi.xssf.usermodel.XSSFDrawing; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.charts.; import org.apache.poi.xssf.usermodel.charts.XDDFDataSource; import org.apache.poi.xssf.usermodel.charts.XDDFChartData; import org.apache.poi.xssf.usermodel.charts.XDDFChartData.Series; import org.apache.poi.xssf.usermodel.charts.XDDFLineChartData; import org.apache.poi.xssf.usermodel.charts.XDDFLineChartData.SeriesMarker; import org.apache.poi.xssf.usermodel.charts.XDDFLineChartData.SeriesMarkerStyle;

import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; import java.util.List;

public class ExcelChartExample {

public static void main(String[] args) {
    try {
        // 创建Excel工作簿
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet('折线图');

        // 创建数据
        Row row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue('时间');
        row1.createCell(1).setCellValue('温度');

        Row row2 = sheet.createRow(1);
        row2.createCell(0).setCellValue('1月');
        row2.createCell(1).setCellValue(10);

        Row row3 = sheet.createRow(2);
        row3.createCell(0).setCellValue('2月');
        row3.createCell(1).setCellValue(15);

        Row row4 = sheet.createRow(3);
        row4.createCell(0).setCellValue('3月');
        row4.createCell(1).setCellValue(20);

        // 创建折线图
        XSSFDrawing drawing = (XSSFDrawing) sheet.createDrawingPatriarch();
        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 0, 10, 10);
        XSSFChart chart = drawing.createChart(anchor);
        chart.setTitleText('温度折线图');
        chart.setTitleOverlay(false);

        // 创建横坐标轴
        XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
        xAxis.setTitle('时间');

        // 创建纵坐标轴
        XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
        yAxis.setTitle('温度');

        // 创建数据源
        XDDFDataSource<String> xData = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, 3, 0, 0));
        XDDFNumericalDataSource<Double> yData = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 3, 1, 1));

        // 创建折线图数据
        XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);
        XDDFChartData.Series series = data.addSeries(xData, yData);
        series.setTitle('温度', null);
        series.setSmooth(false);

        // 设置数据点标记
        XDDFLineChartData.SeriesMarker marker = new XDDFLineChartData.SeriesMarker();
        marker.setMarkerStyle(SeriesMarkerStyle.CIRCLE);
        marker.setMarkerSize((short) 6);
        series.setMarker(marker);

        // 将数据添加到图表中
        chart.plot(data);

        // 保存Excel文件
        FileOutputStream fileOut = new FileOutputStream('折线图.xlsx');
        workbook.write(fileOut);
        fileOut.close();

        System.out.println('折线图已创建并保存到Excel文件中。');

    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

Java Excel 折线图生成 - Apache POI 示例

原文地址: http://www.cveoy.top/t/topic/fSlL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录