Apache POI 生成折线图+柱状图设置双Y轴并导出word文档
实际项目中遇到的问题,相关信息实在较少,怕自己忘记,菜鸟记录一下
我设置的是双Y轴的组和图表。左侧为折线图Y轴,右侧为柱状图Y轴。
直接上代码。
// An highlighted block
public void hydrographAndRainfallFigureWordExport(HttpServletResponse response) {//创建文本对象XWPFDocument document = new XWPFDocument();CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();CTPageMar pageMar = sectPr.addNewPgMar();pageMar.setLeft(BigInteger.valueOf(720L));pageMar.setTop(BigInteger.valueOf(1440L));pageMar.setRight(BigInteger.valueOf(720L));pageMar.setBottom(BigInteger.valueOf(1440L));try {//共用X轴数据List<String> DateList = new ArrayList<>();DateList.add("2022-01-01");DateList.add("2022-01-02");DateList.add("2022-01-03");DateList.add("2022-01-04");DateList.add("2022-01-05");DateList.add("2022-01-06");String[] categories = {"2022-01-01","2022-01-02","2022-01-03","2022-01-04","2022-01-05","2022-01-06"};//柱状图Y轴数据List<Double> HistogramDataList = new ArrayList<>();HistogramDataList.add(1.74);HistogramDataList.add(2.31);HistogramDataList.add(0.65);HistogramDataList.add(1.42);HistogramDataList.add(2.00);HistogramDataList.add(1.73);Double[] HistogramvaluesA ={1.74,2.31,0.65,1.42,2.00,1.73};//折线图Y轴数据List<Double> LineDataList = new ArrayList<>();LineDataList.add(1.74);LineDataList.add(2.31);LineDataList.add(0.65);LineDataList.add(1.42);LineDataList.add(2.00);LineDataList.add(1.73);Double[] LinevaluesA = {1.74,2.31,0.65,1.42,2.00,1.73} ;
//-----------------------------------------柱状图-------------------------------------------------// 设置图表大小XWPFChart chart = document.createChart(15 * Units.EMU_PER_CENTIMETER, 5 * Units.EMU_PER_CENTIMETER);//创建相关数据int numOfPoints = categories.length;String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));String valuesDataRangeA = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1));XDDFDataSource<String> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 1);XDDFNumericalDataSource<Double> valuesDataA = XDDFDataSourcesFactory.fromArray(HistogramvaluesA, valuesDataRangeA, 1);//创建X轴XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.TOP);// 左Y轴XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);// 左Y轴和X轴交叉点在X轴0点位置,在这里我直接注释掉了。
// leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
// leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);// 构建坐标轴leftAxis.crossAxis(bottomAxis);bottomAxis.crossAxis(leftAxis);//设置柱状图Y轴名称,方位和坐标轴大小leftAxis.setTitle("降雨量/mm");leftAxis.setCrosses(AxisCrosses.MAX);leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);// create seriesbottomAxis.setMajorTickMark(AxisTickMark.NONE);//取消X轴的标刻度//获取X轴 图表的基本配置都在这个对象里面里面CTCatAx catAx = chart.getCTChart().getPlotArea().getCatAxArray(0);CTSkip ctSkip = CTSkip.Factory.newInstance();//设置显示间隔ctSkip.setVal((int) Math.ceil(1));catAx.setTickLblSkip(ctSkip);//设置标签位置为最下CTTickLblPos ctTickLblPos = CTTickLblPos.Factory.newInstance();ctTickLblPos.setVal(STTickLblPos.LOW);catAx.setTickLblPos(ctTickLblPos);//获取Y轴 图表的基本配置都在这个对象里面里面CTValAx catAy = chart.getCTChart().getPlotArea().getValAxArray(0);CTScaling ctScaling ;ctScaling = catAy.addNewScaling();//设置柱状图Y轴坐标最大值ctScaling.addNewMax().setVal(8);ctScaling.addNewOrientation().setVal(STOrientation.MAX_MIN);catAy.setScaling(ctScaling);// 设置图表背后的网格线CTLineProperties ctLine = catAy.addNewMajorGridlines().addNewSpPr().addNewLn();ctLine.addNewPrstDash().setVal(STPresetLineDashVal.DASH);//创建柱状图数据对象XDDFChartData data = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);((XDDFBarChartData) data).setBarDirection(BarDirection.COL);//柱状图图例标题XDDFChartData.Series series = data.addSeries(categoriesData, valuesDataA);series.setTitle("下雨量", setTitleInDataSheet(chart, "", 0));chart.plot(data);
//-----------------------------------------折线图-------------------------------------------------// 右Y轴XDDFValueAxis rightAxis = chart.createValueAxis(AxisPosition.RIGHT);// 右Y轴和X轴交叉点在X轴最大值位置rightAxis.setCrosses(AxisCrosses.MIN);rightAxis.setCrossBetween(AxisCrossBetween.BETWEEN);// 构建坐标轴rightAxis.crossAxis(bottomAxis);bottomAxis.crossAxis(rightAxis);//设置折线图Y轴名称rightAxis.setTitle("水位/m");XDDFCategoryDataSource countries = XDDFDataSourcesFactory.fromArray(categories);//设置折线图Y轴坐标最大值rightAxis.setMaximum(8);//LINE:折线图,data = chart.createData(ChartTypes.LINE, bottomAxis, rightAxis);//加载折线图数据XDDFNumericalDataSource<Double> area = XDDFDataSourcesFactory.fromArray(LinevaluesA);//图表加载数据,折线1XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) data.addSeries(countries, area);//折线图例标题series1.setTitle("水位", null);//直线series1.setSmooth(true);//设置标记大小series1.setMarkerSize((short) 2);//设置空数据显示间隙CTDispBlanksAs disp = CTDispBlanksAs.Factory.newInstance();disp.setVal(STDispBlanksAs.GAP);chart.getCTChart().setDispBlanksAs(disp);data.setVaryColors(false);//绘制chart.plot(data);//设置图表图例XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP);//生成word文件,设置文件相关信息。response.setContentType("application/force-download");// 设置强制下载不打开response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("折线+柱状组合图.docx", "UTF-8"));OutputStream out = response.getOutputStream();document.write(out);out.close();} catch (Exception e) {e.printStackTrace();}}
//在WORD内生成柱状图所需方法static CellReference setTitleInDataSheet(XWPFChart chart, String title, int column) {try {XSSFWorkbook workbook = null;workbook = chart.getWorkbook();XSSFSheet sheet = workbook.getSheetAt(0);XSSFRow row = sheet.getRow(0);if (row == null)row = sheet.createRow(0);XSSFCell cell = row.getCell(column);if (cell == null)cell = row.createCell(column);cell.setCellValue(title);return new CellReference(sheet.getSheetName(), 0, column, true, true);} catch (Exception e) {e.printStackTrace();}return null;}
生成的效果图如下:
实际项目中遇到的问题,相关信息较少,记录一下,防止以后自己忘记。
Apache POI 生成折线图+柱状图设置双Y轴并导出word文档相关推荐
- ECharts 折线图柱状图混合双Y轴 利用ajax动态获取后台数据
效果图示如下 后台代码用的框架是SSM 双Y轴根据后台数据展示 大致代码如下: List<Map> findqushi(@Param("date_id") String ...
- 双y轴设置 颜色_项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、实时下位机数据)...
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400长期持续带来更多项目与技术分享 ...
- ecarts柱状图和折线图组合,双y轴数据等分的效果
<ve-histogram :data="chartData1" :settings="chartSettings1" :extend="cha ...
- Java使用POI生成折线图导出到word文档(折线图)
本篇文章主要介绍,如何使用Apache POI组件生成折线图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成折线图导出到word文档中,最终生成的折线图如下所示: 二. ...
- echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向
echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向 option1: {color: ['#21E9F6', '#F2CE2E', '#EE2929', '#006DD9', '#1789FF ...
- echarts中设置双Y轴左右刻度线一致
echarts中设置双Y轴左右刻度线一致 一.效果图 二.主要代码 一.效果图 二.主要代码 this.taskxAxis = []this.taskSeries = [[], []]taskInit ...
- 思维导图软件MindManager导出Word文档功能详解
Mindmanager思维导图软件作为一款能与Microsoft office软件无缝集成的思维导图软件,支持Word文档的快速导入与导出,并支持Word文档的目录生成.模板套用等,极大地方便了用户完 ...
- Java使用POI实现导出Word文档
POI官网链接:http://deepoove.com/poi-tl/(方便各位博友后期深入学习) 1.首先导入POM依赖包 <dependency><groupId>com. ...
- 将mysql 导出word文档_将数据库的内容生成WORD文档
毕业设计需要从库里取纪录生成word文档,我找了半天,主要有这么几种方法: 1.改头,就是象excel似的Response.Buffer = TRUE Response.ContentType = & ...
最新文章
- B-tree/B+tree/B*tree
- 4.3 matlab常用的特殊图形(条形图、直方图、饼图、散点图等)
- AVI音视频封装格式学习
- 04_05_06:设置线型风格(设置线型风格)、区域着色 (Shading Regions)、设置Spines
- Docker 三剑客
- django rest framework 过滤 lim分页
- 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
- HTC G14解锁S OFF 刷机 获取ROOT权限
- java编程规范之java命名规范
- 景格虚拟教具混合动力汽车动力系统虚拟结构原理展示台复制狗
- win7设置背景色保护视力
- IPFS和梅克尔森林
- 基于SSH的员工信息管理系统
- iOS新增3DTouch分享app菜单 (#原来iphone可以称重# ​ )
- 计算机直接切换到桌面,电脑怎样快速切换桌面_一键快速回到桌面的多种方法...
- net logon服务无法启动
- C语言 主动判别int型出界
- 推荐一个Windows10下的搜索软件:Everything
- 基于FPGA的ASK/FSK调制
- 使用PIE engine免费快速下载全球12.5m的DEM影像