实际项目中遇到的问题,相关信息实在较少,怕自己忘记,菜鸟记录一下

我设置的是双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文档相关推荐

  1. ECharts 折线图柱状图混合双Y轴 利用ajax动态获取后台数据

    效果图示如下 后台代码用的框架是SSM 双Y轴根据后台数据展示 大致代码如下: List<Map> findqushi(@Param("date_id") String ...

  2. 双y轴设置 颜色_项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、实时下位机数据)...

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400长期持续带来更多项目与技术分享 ...

  3. ecarts柱状图和折线图组合,双y轴数据等分的效果

    <ve-histogram :data="chartData1" :settings="chartSettings1" :extend="cha ...

  4. Java使用POI生成折线图导出到word文档(折线图)

    本篇文章主要介绍,如何使用Apache POI组件生成折线图导出到word文档中,具体步骤看下文. 一.实现效果 Java使用POI技术生成折线图导出到word文档中,最终生成的折线图如下所示: 二. ...

  5. echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向

    echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向 option1: {color: ['#21E9F6', '#F2CE2E', '#EE2929', '#006DD9', '#1789FF ...

  6. echarts中设置双Y轴左右刻度线一致

    echarts中设置双Y轴左右刻度线一致 一.效果图 二.主要代码 一.效果图 二.主要代码 this.taskxAxis = []this.taskSeries = [[], []]taskInit ...

  7. 思维导图软件MindManager导出Word文档功能详解

    Mindmanager思维导图软件作为一款能与Microsoft office软件无缝集成的思维导图软件,支持Word文档的快速导入与导出,并支持Word文档的目录生成.模板套用等,极大地方便了用户完 ...

  8. Java使用POI实现导出Word文档

    POI官网链接:http://deepoove.com/poi-tl/(方便各位博友后期深入学习) 1.首先导入POM依赖包 <dependency><groupId>com. ...

  9. 将mysql 导出word文档_将数据库的内容生成WORD文档

    毕业设计需要从库里取纪录生成word文档,我找了半天,主要有这么几种方法: 1.改头,就是象excel似的Response.Buffer = TRUE Response.ContentType = & ...

最新文章

  1. B-tree/B+tree/B*tree
  2. 4.3 matlab常用的特殊图形(条形图、直方图、饼图、散点图等)
  3. AVI音视频封装格式学习
  4. 04_05_06:设置线型风格(设置线型风格)、区域着色 (Shading Regions)、设置Spines
  5. Docker 三剑客
  6. django rest framework 过滤 lim分页
  7. 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
  8. HTC G14解锁S OFF 刷机 获取ROOT权限
  9. java编程规范之java命名规范
  10. 景格虚拟教具混合动力汽车动力系统虚拟结构原理展示台复制狗
  11. win7设置背景色保护视力
  12. IPFS和梅克尔森林
  13. 基于SSH的员工信息管理系统
  14. iOS新增3DTouch分享app菜单 (#原来iphone可以称重# ​ )
  15. 计算机直接切换到桌面,电脑怎样快速切换桌面_一键快速回到桌面的多种方法...
  16. net logon服务无法启动
  17. C语言 主动判别int型出界
  18. 推荐一个Windows10下的搜索软件:Everything
  19. 基于FPGA的ASK/FSK调制
  20. 使用PIE engine免费快速下载全球12.5m的DEM影像

热门文章

  1. java Lambda表达式详解
  2. IVM格式(互动媒体)
  3. SpringBoot项目中使用set方法后,自动保存问题
  4. Java五子棋游戏开发博客
  5. Microbit Turnipbit 孩子也能做的声光控开关
  6. 每粒尘埃都有IP,你信了吗?
  7. 第五章 阻抗匹配与调谐 Smith圆图
  8. C++ bind2nd用法
  9. Mesh—合并网格提升性能
  10. linux java环境变量不生效_Linux下java环境变量配置问题,解决 重新打开bash后JDK环境变量无效问题...