看代码 看就完了 POI 4.1.2的 下面三个
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
import com.uil.excelchart.entry.LineChart;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xddf.usermodel.LineCap;
import org.apache.poi.xddf.usermodel.XDDFLineProperties;
import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.charts.XSSFChartLegend;
import org.apache.xmlbeans.XmlException;
import org.openxmlformats.schemas.drawingml.x2006.chart.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author liu
* 升级poi 4.1.2
*/
public class ChartUtil {
public static void main(String[] args) {
try {
createChart();
createPie();
} catch (XmlException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void createChart() throws XmlException, IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Pie Chart");
ArrayList<String> xArr = new ArrayList<>();
xArr.add("1yue");
xArr.add("2yue");
xArr.add("3yue");
xArr.add("4yue");
xArr.add("5yue");
xArr.add("6yue");
xArr.add("7yue");
ArrayList<Double> yArr1 = new ArrayList<>();
yArr1.add(26d);
yArr1.add(6d);
yArr1.add(10d);
yArr1.add(22d);
yArr1.add(4d);
yArr1.add(12d);
yArr1.add(11d);
ArrayList<Double> yArr2 = new ArrayList<>();
yArr2.add(22d);
yArr2.add(8d);
yArr2.add(14d);
yArr2.add(27d);
yArr2.add(14d);
yArr2.add(22d);
yArr2.add(6d);
ArrayList<Double> yArr3 = new ArrayList<>();
yArr3.add(21.2);
yArr3.add(0d);
yArr3.add(17.15);
yArr3.add(21.13);
yArr3.add(22d);
yArr3.add(12d);
yArr3.add(9d);
// Create a chart
XSSFDrawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 7, 8, 33);
XSSFChart chart = drawing.createChart(anchor);
// 创建图表系列
XSSFChartLegend legend = chart.getOrCreateLegend();
legend.setPosition(org.apache.poi.ss.usermodel.charts.LegendPosition.TOP);
XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
chart.setTitleOverlay(false);
//设置柱表两端的柱子 不要被遮挡
yAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
XDDFBarChartData data = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);
data.setBarDirection(BarDirection.COL);
data.setVaryColors(true);
//动态数据
XDDFDataSource<String> xData = XDDFDataSourcesFactory.fromArray(xArr.toArray(new String[]{}));
XDDFNumericalDataSource<Double> yData1 = XDDFDataSourcesFactory.fromArray(yArr1.toArray(new Double[]{}));
XDDFChartData.Series series1 = data.addSeries(xData, yData1);
series1.setTitle("NLZ", null);
// XDDFNumericalDataSource<Double> yData2 = XDDFDataSourcesFactory.fromArray(yArr2.toArray(new Double[]{}));
XDDFNumericalDataSource<Double> yData3 = XDDFDataSourcesFactory.fromArray(yArr3.toArray(new Double[]{}));
// XDDFChartData.Series series2 = data.addSeries(xData, yData2);
// XDDFChartData.Series series3 = data.addSeries(xData, yData3);
// series2.setTitle("NCR", null);
// series3.setTitle("CCC", null);
XDDFChartData lineData = chart.createData(ChartTypes.LINE, xAxis, yAxis);
XDDFChartData.Series series = lineData.addSeries(xData, yData3);
series.setTitle("ddd", null);
series.setShowLeaderLines(true);
XDDFShapeProperties shapeProperties = series.getShapeProperties();
if (shapeProperties == null) {
shapeProperties = new XDDFShapeProperties();
series.setShapeProperties(shapeProperties);
}
XDDFLineProperties lineProperties = shapeProperties.getLineProperties();
if (lineProperties == null) {
lineProperties = new XDDFLineProperties();
shapeProperties.setLineProperties(lineProperties);
}
lineProperties.setWidth(2.5);
lineProperties.setLineCap(LineCap.FLAT);
data.setGapWidth(50);
data.setBarGrouping(BarGrouping.STANDARD);
//设置数字标签 但是会显示所有的数据如x周的数据 所以要取消掉其他的
CTPlotArea plotArea = chart.getCTChart().getPlotArea();
for (CTBarSer ser : plotArea.getBarChartArray(0).getSerList()) {
CTBoolean ctBoolean = CTBoolean.Factory.newInstance();
ctBoolean.setVal(false);
CTDLbls ctdLbls = ser.addNewDLbls();
ctdLbls.addNewShowVal().setVal(true);
ctdLbls.addNewNumFmt().setFormatCode("#");
ctdLbls.setShowBubbleSize(ctBoolean);
ctdLbls.setShowCatName(ctBoolean);
ctdLbls.setShowLeaderLines(ctBoolean);
ctdLbls.setShowLegendKey(ctBoolean);
ctdLbls.setShowSerName(ctBoolean);
ctdLbls.setShowPercent(ctBoolean);
}
for (CTLineSer ser : plotArea.getLineChartArray(0).getSerList()) {
CTBoolean ctBoolean = CTBoolean.Factory.newInstance();
ctBoolean.setVal(false);
CTDLbls ctdLbls = ser.addNewDLbls();
ctdLbls.addNewShowVal().setVal(true);
ctdLbls.addNewNumFmt().setFormatCode("#");
ctdLbls.setShowBubbleSize(ctBoolean);
ctdLbls.setShowCatName(ctBoolean);
ctdLbls.setShowLeaderLines(ctBoolean);
ctdLbls.setShowLegendKey(ctBoolean);
ctdLbls.setShowSerName(ctBoolean);
ctdLbls.setShowPercent(ctBoolean);
}
chart.plot(data);
chart.plot(lineData);
// 保存工作簿到文件
try (FileOutputStream fileOut = new FileOutputStream("D:\\桌面文件\\pieChart.xlsx")) {
workbook.write(fileOut);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
// 关闭工作簿
try {
workbook.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
/**
* 创建饼图
*/
public static void createPie() {
String titleName = "ppp";
List<String> titleList = new ArrayList<>();
List<Integer> dataList = new ArrayList<>();
titleList.add("a");
titleList.add("b");
titleList.add("c");
titleList.add("d");
titleList.add("e");
dataList.add(12);
dataList.add(5);
dataList.add(3);
dataList.add(17);
dataList.add(22);
Workbook workbook = new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Pie Chart");
XSSFDrawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 7, 8, 33);
XSSFChart chart = drawing.createChart(anchor);
chart.setTitleOverlay(false);
//图例位置
XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(LegendPosition.TOP);
//分类轴标数据
XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromArray(titleList.toArray(new String[]{}));
XDDFNumericalDataSource<Integer> values = XDDFDataSourcesFactory.fromArray(dataList.toArray(new Integer[]{}));
XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);
//设置为可变颜色
data.setVaryColors(true);
//图表加载数据
data.addSeries(countries, values);
//绘制
CTChart ctChart = chart.getCTChart();
chart.plot(data);
chart.setTitleText("OUTAGE PER AREA");
chart.getCTChartSpace().addNewRoundedCorners().setVal(false);
CTDLbls ctdLbls = ctChart.getPlotArea().getPieChartArray(0).getSerArray(0).addNewDLbls();
ctdLbls.addNewShowVal().setVal(false);
ctdLbls.addNewShowLegendKey().setVal(true);
//类别名称
ctdLbls.addNewShowCatName().setVal(false);
//百分比
ctdLbls.addNewShowSerName().setVal(false);
ctdLbls.addNewShowPercent().setVal(true);
//引导线
ctdLbls.addNewShowLeaderLines().setVal(false);
//分隔符为分行符
ctdLbls.setSeparator("\n");
try (FileOutputStream fileOut = new FileOutputStream("D:\\桌面文件\\pChart.xlsx")) {
workbook.write(fileOut);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
// 关闭工作簿
try {
workbook.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
/**
* 创建折线图
*/
public static void createLine(LineChart lineChart) {
List<Object> xAxisList = lineChart.getXAxisList();
List<String> chartTitleList = lineChart.getTitleList();
List<List<Integer>> chartDataList = lineChart.getDataList();
String chartTitle = lineChart.getChartTitle();
Workbook workbook = new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("Pie Chart");
XSSFDrawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 7, 8, 33);
XSSFChart chart = drawing.createChart(anchor);
chart.setTitleOverlay(false);
//图例位置
XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(LegendPosition.TOP);
//分类轴标(X轴),标题位置
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
//值(Y轴)轴,标题位置
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
//LINE:折线图
XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(Arrays.copyOf(xAxisList.toArray(), xAxisList.toArray().length, String[].class));
for (int i = 0; i < chartDataList.size(); i++) {
List<Integer> floats = chartDataList.get(i);
XDDFNumericalDataSource<Integer> dataSource = XDDFDataSourcesFactory.fromArray(floats.toArray(new Integer[]{}));
//图表加载数据,折线
XDDFLineChartData.Series series = (XDDFLineChartData.Series) data.addSeries(countries, dataSource);
series.setTitle(chartTitleList.get(i), null);
//直线
series.setSmooth(false);
//设置标记大小
series.setMarkerSize((short) 2);
//添加标签数据,折线图中拐点值展示
series.setShowLeaderLines(true);
// chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls()
// .addNewDLblPos().setVal(org.openxmlformats.schemas.drawingml.x2006.chart.STDLblPos.CTR);
chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowVal().setVal(true);
chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowLegendKey().setVal(false);
chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowCatName().setVal(false);
chart.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getDLbls().addNewShowSerName().setVal(false);
}
//绘制
chart.plot(data);
if (chartDataList.size() == 1) {
chart.getCTChart().getPlotArea().getLineChartArray(0).addNewVaryColors().setVal(false);
}
}
}
不懂问我吧 可以加QQ 582323339 因为没到三级。。。 直接加吧 带上问题