poi版本5.2.2
public class WordPieChart implements WordChart {
public void bulider(XWPFChart chart, ChartOption options) {
String sheetName = "sheet0";
XSSFWorkbook workbook = null;
try {
workbook = chart.getWorkbook();
} catch (Exception e) {
e.printStackTrace();
return;
}
XSSFSheet sheet = workbook.getSheet(sheetName);
int rowIndex = this.refreshSheet(sheet, options);
// 图例
if(options.isShowLegend()) {
XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(options.getLegendPosition());
}
XDDFPieChartData pie = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null);
XDDFCategoryDataSource categorySource = XDDFDataSourcesFactory.fromStringCellRange(sheet,new CellRangeAddress(1, rowIndex - 1, 0, 0));
XDDFNumericalDataSource<Double> valueSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet,new CellRangeAddress(1, rowIndex - 1, 1, 1));
XDDFChartData.Series series = pie.addSeries(categorySource, valueSource);
chart.plot(pie);
// 自定义饼图颜色
CTChart c = chart.getCTChart();
if (c.getAutoTitleDeleted() == null) {
c.addNewAutoTitleDeleted();
}
c.getAutoTitleDeleted().setVal(false);
int pointCount = series.getCategoryData().getPointCount();
CTPieSer ser = c.getPlotArea().getPieChartArray(0).getSerArray(0);
for (int p = 0; p < pointCount; p++) {
ser.addNewDPt().addNewIdx().setVal(p);
ser.getDPtArray(p).addNewSpPr().addNewSolidFill().addNewSrgbClr().setVal(options.getColor(p));
}
}
}
效果如下
本功能所有代码实现,摘自开源项目demo-ureport: 基于spring boot + Vue2 + Element UI + Echarts 重构ureport2中国式复杂报表设计器开源项目目录src/main/java/com/bstek/ureport/export/word/chart下