Aspose.Cells生成Excel图表

本文介绍如何使用Aspose.Cells for Java库动态插入数据到Excel并生成图表。通过示例代码展示了如何读取模板文件、填充数据及配置图表样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态插入数据,根据插入的数据生成Chart,用的Excel组件,Aspose.Cells for Java,https://apireference.aspose.com/cells/java

先看一下效果图

示例代码

我是需要用到报表模板

Workbook wb;
try {
    // 读取jar中报表模板
    ClassPathResource resource = new ClassPathResource("exportTemplate/" + templateName);
    InputStream fis = resource.getInputStream();

    wb = new Workbook(fis);
} catch (Exception e) {
    throw new BaseException("读取报表模板失败!");
}

不需要直接

Workbook workbook = new Workbook();

往第一个sheet,插入点测试数据

Worksheet sheet = workbook.getWorksheets().get(0);

Cells cells = sheet.getCells();
cells.get(0, 1).putValue("Income");
cells.get(1, 0).putValue("3月10日");
cells.get(2, 0).putValue("3月11日");
cells.get(3, 0).putValue("3月12日");
cells.get(1, 1).putValue(22.322);
cells.get(2, 1).putValue(22.844);
cells.get(3, 1).putValue(23.499);
cells.get(1, 2).putValue(26.869);
cells.get(2, 2).putValue(26.636);
cells.get(3, 2).putValue(26.633);
cells.get(1, 3).putValue(1.64);
cells.get(2, 3).putValue(1.75);
cells.get(3, 3).putValue(1.62);

插入Chart

int chartIndex = sheet.getCharts().add(ChartType.LINE, 16, 0, 36, 8);
Chart chart = sheet.getCharts().get(chartIndex);
chart.getNSeries().add("B2:B4", true);
chart.getNSeries().add("C2:C4", true);
chart.getNSeries().add("D2:D4", true);
// chart.getNSeries().addR1C1("R[1]C[1]:R[3]C[2]", true);
chart.getNSeries().setCategoryData("A2:A4");
// Series aSeries = chart.getNSeries().get(0);
// aSeries.setName("=B1");
chart.setShowLegend(true);
chart.getTitle().setText("Income Analysis");

for (int i = 0; i < chart.getNSeries().getCount(); i++) {
    //设置每条折线的名称
    chart.getNSeries().get(i).setName("折线" + i);
    //设置每个值坐标点的样式
    Marker marker = chart.getNSeries().get(i).getMarker();
    marker.setMarkerStyle(ChartMarkerType.AUTOMATIC);
    marker.setMarkerSizePx(10);
}
// 设置右边坐标轴显示
chart.getSecondValueAxis().setVisible(true);
// 设置图例的位置
Legend legend = chart.getLegend();
legend.setPosition(LegendPositionType.BOTTOM);
legend.getBorder().setVisible(false);

chart.getPlotArea().getArea().setForegroundColor(Color.getTransparent());

保存

try {
    workbook.save(reportPath);
} catch (Exception exception) {
}

 2022年3月26日补充,坐标轴标题过长不能自动居中,暂时先手动设置位置,查阅官方文档,也没理解setX(),setY()啥意思到底

chart.getValueAxis().getTitle().setY(-200);

设置折线的颜色样式

Series series = chart.getNSeries().get(0);
series.getBorder().setColor(Color.fromArgb(68, 114, 196));
series.getBorder().setWeight(WeightType.MEDIUM_LINE);

 设置坐标点颜色样式,这里如果MarkerStyle set的是AUTOMATIC,颜色样式设了就不起作用

// 设置每个值坐标点的样式
Marker marker = chart.getNSeries().get(0).getMarker();
marker.getBorder().setColor(Color.getBlack());
marker.getArea().setForegroundColor(Color.fromArgb(68, 114, 196));
marker.setMarkerStyle(ChartMarkerType.CIRCLE);
marker.setMarkerSizePx(10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值