首先pom导入poi依赖,要用高版本的poi,我用的5.0.0是可以的。
注意此处有坑,在5.0.0高版本中原来的poi-ooxml-schemas已经改名为poi-ooxml-lite
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-lite</artifactId>
<version>5.0.0</version>
</dependency>
import的时候把所有chart相关的都弄进来就行
import org.apache.poi.xddf.usermodel.chart.*;
下边为生成word中3D折线图的代码
public static void generateChart(XWPFChart chart, String[] series, String[] categories, List<Double[]> values, String title) {
String chartTitle = title;
final List<XDDFChartData> data = chart.getChartSeries();
final XDDFLine3DChartData line = (XDDFLine3DChartData) data.get(0);//这里一般获取第一个,我们这里是3D折线图就是XDDFLine3DChartData,这里就是关键的代码
final int numOfPoints = categories.length;
final String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));
final XDDFDataSource<?> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0);
for (int i = 0; i < values.size(); i++) {
final String valuesDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, i + 1, i + 1));
Number[] value = values.get(i);
final XDDFNumericalDataSource<? extends Number> valuesData = XDDFDataSourcesFactory.fromArray(value, valuesDataRange, i + 1);
XDDFChartData.Series ser;//图表中的系列
ser = line.getSeries().get(i);
ser.replaceData(categoriesData, valuesData);
CellReference cellReference = chart.setSheetTitle(series[i], 1);//修改系列标题
ser.setTitle(series[i], cellReference);
}
chart.plot(line);
chart.setTitleText(chartTitle);//折线图标题
chart.setTitleOverlay(false);
}
其他部分的代码就不贴了,生成word普通折线图的教程网上一搜一大把,大同小异