700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Poi 如何使用Java和POI技术生成折线图 柱状图 饼状图导出到word文档

Poi 如何使用Java和POI技术生成折线图 柱状图 饼状图导出到word文档

时间:2023-03-06 11:28:27

相关推荐

Poi 如何使用Java和POI技术生成折线图 柱状图 饼状图导出到word文档

这篇文章主要介绍POI生成图表并导出word文档的基本操作。主要介绍三种图表:折线图、柱状图、饼状图。

一、效果展示

使用Java和POI技术生成的折线图,柱状图,饼状图的效果如下图所示:

二、环境准备

主要使用的技术有如下两个:

编程语言:Java第三方依赖:Apache POI

Apache POI依赖代码如下所示:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</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-scratchpad</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency>

三、具体实现

(1)折线图

折线图主要有X轴,Y轴,图表,图例,数据集等相关设置。使用POI生成图表到word文档中,具体步骤如下(代码几乎每句都有注释,方便阅读和理解):

创建word文档的XWPFDocument对象创建chart图表的XWPFChart对象创建X轴(分类轴)的XDDFCategoryAxis对象创建Y轴(值轴)的XDDFValueAxis对象创建折线图的XDDFLineChartData对象addSeries加载数据集使用plot绘制折线图输出到word文档关闭流对象

具体实现代码如下所示:

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;import org.apache.poi.util.Units;import org.apache.poi.xddf.usermodel.chart.*;import org.apache.poi.xwpf.usermodel.XWPFChart;import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileOutputStream;import java.io.IOException;/*** @version 1.0.0* @Description: poi生成折线图* @Date: /12/25 18:14* @Copyright (C) ZhuYouBin*/public class LineChart {public static void main(String[] args) throws Exception {// 1、创建word文档对象XWPFDocument document = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置chart.setTitleText("使用POI创建的折线图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); // 创建X轴,并且指定位置xAxis.setTitle("日期(年月)"); // x轴标题String[] xAxisData = new String[] {"-01","-02","-03","-04","-05","-06","-07","-08","-09","-10","-11","-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据// 6、Y轴(值轴)相关设置XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT); // 创建Y轴,指定位置yAxis.setTitle("粉丝数(个)"); // Y轴标题Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据// 7、创建折线图对象XDDFLineChartData lineChart = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);// 8、加载折线图数据集XDDFLineChartData.Series lineSeries = (XDDFLineChartData.Series) lineChart.addSeries(xAxisSource, yAxisSource);lineSeries.setTitle("粉丝数", null); // 图例标题lineSeries.setSmooth(true); // 线条样式:true平滑曲线,false折线lineSeries.setMarkerSize((short) 6); // 标记点大小lineSeries.setMarkerStyle(MarkerStyle.CIRCLE); // 标记点样式// 9、绘制折线图chart.plot(lineChart);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("H:\\poi\\lineChart.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}}

(2)柱状图

柱状图主要有X轴,Y轴,图表,图例,数据集等相关设置,具体实现代码如下所示:

import org.apache.poi.util.Units;import org.apache.poi.xddf.usermodel.chart.*;import org.apache.poi.xwpf.usermodel.XWPFChart;import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileOutputStream;/*** @version 1.0.0* @Description: poi生成柱状图* @Date: /12/25 19:20* @Copyright (C) ZhuYouBin*/public class BarChart {public static void main(String[] args) throws Exception {// 1、创建word文档对象XWPFDocument document = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置chart.setTitleText("使用POI创建的柱状图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); // 创建X轴,并且指定位置xAxis.setTitle("日期(年月)"); // x轴标题String[] xAxisData = new String[] {"-01","-02","-03","-04","-05","-06","-07","-08","-09","-10","-11","-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据// 6、Y轴(值轴)相关设置XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT); // 创建Y轴,指定位置yAxis.setTitle("粉丝数(个)"); // Y轴标题yAxis.setCrossBetween(AxisCrossBetween.BETWEEN); // 设置图柱的位置:BETWEEN居中Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据// 7、创建柱状图对象XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);barChart.setBarDirection(BarDirection.COL); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR// 8、加载柱状图数据集XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);barSeries.setTitle("粉丝数", null); // 图例标题// 9、绘制柱状图chart.plot(barChart);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("H:\\poi\\barChart.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}}

(3)饼状图

饼状图主要是图表,图例,数据集等相关设置,具体实现代码如下所示:

import org.apache.poi.util.Units;import org.apache.poi.xddf.usermodel.chart.*;import org.apache.poi.xwpf.usermodel.XWPFChart;import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.FileOutputStream;/*** @version 1.0.0* @Description: poi生成饼图* @Date: /12/25 20:04* @Copyright (C) ZhuYouBin*/public class PieChart {public static void main(String[] args) throws Exception {// 1、创建word文档对象XWPFDocument document = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置chart.setTitleText("使用POI创建的饼图"); // 图表标题chart.setTitleOverlay(false); // 图例是否覆盖标题// 4、图例设置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP); // 图例位置:上下左右// 5、X轴(分类轴)相关设置:饼图中的图例显示String[] xAxisData = new String[] {"-01","-02","-03","-04","-05","-06","-07","-08","-09","-10","-11","-12",};XDDFCategoryDataSource xAxisSource = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置分类数据// 6、Y轴(值轴)相关设置:饼图中的圆形显示Integer[] yAxisData = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置值数据// 7、创建饼图对象,饼状图不需要X,Y轴,只需要数据集即可XDDFPieChartData pieChart = (XDDFPieChartData) chart.createData(ChartTypes.PIE, null, null);// 8、加载饼图数据集XDDFPieChartData.Series pieSeries = (XDDFPieChartData.Series) pieChart.addSeries(xAxisSource, yAxisSource);pieSeries.setTitle("粉丝数", null); // 系列提示标题// 9、绘制饼图chart.plot(pieChart);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("H:\\poi\\pieChart.docx");document.write(fos); // 导出word// 11、关闭流fos.close();document.close();}}

以上,就是使用Java和POI技术生成折线图,柱状图,饼状图导出到word文档的步骤

我的其他文章

亲身分享 一次 字节跳动 真实面试经历和面试题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。