Java Excel 折线图生成 - Apache POI 示例
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();
}
}
}
原文地址: http://www.cveoy.top/t/topic/fSlL 著作权归作者所有。请勿转载和采集!