使用Apache POI创建Excel折线图并保存为图片
使用Apache POI创建Excel折线图并保存为图片
本教程将指导您使用Apache POI库在Java中创建Excel折线图。我们将涵盖以下步骤:
- 读取Excel文件数据2. 创建折线图3. 设置图例和轴4. 添加数据系列5. 将图表保存到Excel文件6. 将图表保存为图片文件
代码示例
以下是一个完整的Java代码示例,演示如何创建Excel折线图并将其保存为图片:javaimport org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xddf.usermodel.chart.;import org.apache.poi.xssf.usermodel.;
import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;
public class ExcelChartExample03 {
public static void main(String[] args) { try { // 读取Excel文件 FileInputStream fileIn = new FileInputStream('巴新EDEVU水库数据处理表.xlsx'); XSSFWorkbook workbook = new XSSFWorkbook(fileIn); XSSFSheet sheet1 = workbook.getSheet('P9'); XSSFSheet sheet2 = workbook.getSheet('P10');
// 创建折线图 (在'P10'工作表) XSSFDrawing drawing = sheet2.createDrawingPatriarch(); XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 9, 9, 19); XSSFChart chart = drawing.createChart(anchor); chart.setTitleText('数据折线图'); chart.setTitleOverlay(false);
// 设置图例位置 XDDFChartLegend legend = chart.getOrAddLegend(); legend.setPosition(LegendPosition.BOTTOM);
// 创建数据系列 XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT); leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
// 创建数据源 XDDFNumericalDataSource<Double> xs1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet1, new CellRangeAddress(11, 85, 0, 0)); XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet1, new CellRangeAddress(11, 85, 2, 2)); XDDFNumericalDataSource<Double> xs2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet2, new CellRangeAddress(11, 139, 0, 0)); XDDFNumericalDataSource<Double> ys2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet2, new CellRangeAddress(11, 139, 2, 2));
// 添加数据系列 XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis); XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) data.addSeries(xs1, ys1); series1.setTitle('P9数据折线图', null); XDDFLineChartData.Series series2 = (XDDFLineChartData.Series) data.addSeries(xs2, ys2); series2.setTitle('P10数据折线图', null);
// 绘制图表 chart.plot(data);
// 创建'温度'工作表 (如果不存在) XSSFSheet sheet3 = workbook.getSheet('温度'); if (sheet3 == null) { sheet3 = workbook.createSheet('温度'); }
// 将图表复制到'温度'工作表 XSSFDrawing drawing2 = sheet3.createDrawingPatriarch(); XSSFClientAnchor anchor2 = drawing2.createAnchor(0, 0, 0, 0, 0, 0, 10, 20); XSSFChart chart2 = drawing2.createChart(anchor2); chart2.setTitleText('数据折线图'); chart2.setTitleOverlay(false); XDDFCategoryAxis bottomAxis2 = chart2.createCategoryAxis(AxisPosition.BOTTOM); XDDFValueAxis leftAxis2 = chart2.createValueAxis(AxisPosition.LEFT); leftAxis2.setCrosses(AxisCrosses.AUTO_ZERO); XDDFLineChartData data2 = (XDDFLineChartData) chart2.createData(ChartTypes.LINE, bottomAxis2, leftAxis2); data2.addSeries(xs1, ys1); data2.addSeries(xs2, ys2); chart2.plot(data2);
// 将'温度'工作表中的图表保存为图片 BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB); image.createGraphics(); chart2.plot(data2); ImageIO.write(image, 'png', new File('温度折线图.png'));
// 保存Excel文件 FileOutputStream fileOut = new FileOutputStream('巴新EDEVU水库数据处理表.xlsx'); workbook.write(fileOut); fileOut.close();
System.out.println('折线图已创建并保存到Excel文件和图片中。');
} catch (IOException e) { e.printStackTrace(); }
原文地址: http://www.cveoy.top/t/topic/f4lP 著作权归作者所有。请勿转载和采集!