poi在Word中生成各种图表(支持柱状、组合、环状图、折线图、等常用图)

您所在的位置:网站首页 word文档怎么做图表组合图 poi在Word中生成各种图表(支持柱状、组合、环状图、折线图、等常用图)

poi在Word中生成各种图表(支持柱状、组合、环状图、折线图、等常用图)

2024-07-17 04:10:50| 来源: 网络整理| 查看: 265

poi在Word中生成各种图表(支持柱状、组合、环状图、折线图、等常用图) poi版本

1.maven坐标

org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 2.poi官网指出需要poi4.x.x版本抛弃了jdk1.7之前的版本,所以适应此版本需要将jdk升级,如果不想升级还有另一种办法就是,使用springBoot单独做一个服务为你的主项目提供一个接口,让主项目去调用生成word流让主项目去接收即可。 效果图

1.刷新之前 在这里插入图片描述 2.刷新之后 在这里插入图片描述

代码

public class PoiDemoWordTable { public static void main(String[] args) throws Exception { final String returnurl=“d://poi/test.docx”; final String templateurl=“D://poi/onepage.docx”; InputStream is = new FileInputStream(new File(templateurl)); XWPFDocument doc = new XWPFDocument(is); replaceAll(doc); //文件存在删除 try { File file = new File(returnurl); if (file.exists()) { file.delete(); } FileOutputStream fos = new FileOutputStream(returnurl); doc.write(fos); fos.close(); } catch (Exception e) { e.printStackTrace(); } }

/** * @Description: 替换段落和表格中 */ public static void replaceAll( XWPFDocument doc) throws InvalidFormatException, FileNotFoundException, IOException{ /**----------------------------处理段落------------------------------------**/ List paragraphList = doc.getParagraphs(); if (paragraphList != null && paragraphList.size() > 0) { for (XWPFParagraph paragraph : paragraphList) { List runs = paragraph.getRuns(); for (XWPFRun run : runs) { String text = run.getText(0); if (text != null) { if (text.contains("${table1}")) { run.setText("",0); XmlCursor cursor = paragraph.getCTP().newCursor(); XWPFTable tableOne = doc.insertNewTbl(cursor);// ---这个是关键 XWPFTableRow tableOneRowOne = tableOne.getRow(0);//行 setWordCellSelfStyle(tableOneRowOne.getCell(0),"微软雅黑","9",1,"left","top","#ffffff","#4472C4",1,"序号"); XWPFTableCell cell12 = tableOneRowOne.createCell(); setWordCellSelfStyle(cell12,"微软雅黑","9",1,"left","top","#ffffff","#4472C4",1,"公司名称(英文)"); XWPFTableCell cell13 = tableOneRowOne.createCell(); setWordCellSelfStyle(cell13,"微软雅黑","9",1,"left","top","#ffffff","#4472C4",1,"公司名称(中文)"); XWPFTableRow tableOneRowTwo = tableOne.createRow();//行 tableOneRowTwo.getCell(0).setText("第二行第一列"); setWordCellSelfStyle(tableOneRowTwo.getCell(0),"微软雅黑","9",0,"left","top","#000000","#B4C6E7",1,"一行一列"); tableOneRowTwo.getCell(1).setText("第二行第二列"); setWordCellSelfStyle(tableOneRowTwo.getCell(1),"微软雅黑","9",0,"left","top","#000000","#B4C6E7",1,"一行一列"); tableOneRowTwo.getCell(2).setText("第二行第二列"); setWordCellSelfStyle(tableOneRowTwo.getCell(2),"微软雅黑","9",0,"left","top","#000000","#B4C6E7",1,"一行一列"); XWPFTableRow tableOneRowThree = tableOne.createRow();//行 tableOneRowThree.getCell(0).setText("第三行第一列"); setWordCellSelfStyle(tableOneRowThree.getCell(0),"微软雅黑","9",0,"left","top","#000000","#D9E2F3",1,"一行一列"); tableOneRowThree.getCell(1).setText("第三行第二列"); setWordCellSelfStyle(tableOneRowThree.getCell(1),"微软雅黑","9",0,"left","top","#000000","#D9E2F3",1,"一行一列"); tableOneRowThree.getCell(2).setText("第三行第二列"); setWordCellSelfStyle(tableOneRowThree.getCell(2),"微软雅黑","9",0,"left","top","#000000","#D9E2F3",1,"一行一列"); }else{//动态图表 List showtailArr=new ArrayList(); showtailArr.add("0"); showtailArr.add("2"); List ispercentArr=new ArrayList(); ispercentArr.add("0"); ispercentArr.add("0"); List titleArr = new ArrayList();// 标题 titleArr.add("行业类别"); titleArr.add("占基金资产净值比例(%)"); List fldNameArr = new ArrayList();// 字段名 fldNameArr.add("item1"); fldNameArr.add("item3"); List listItemsByType=new ArrayList(); Map base1=new HashMap();//相当于HashMap base1.put("item1","材料费用"); base1.put("item3","500.10"); Map base2=new HashMap();//相当于HashMap base2.put("item1","出差费用"); base2.put("item3","300.10"); listItemsByType.add(base1); listItemsByType.add(base2); //动态刷新图表 List relations = doc.getRelations(); for (POIXMLDocumentPart poixmlDocumentPart : relations) { if (poixmlDocumentPart instanceof XWPFChart) { XWPFChart chart = (XWPFChart) poixmlDocumentPart; chart.getCTChart(); //根据属性第一列名称切换数据类型 CTChart ctChart = chart.getCTChart(); CTPlotArea plotArea = ctChart.getPlotArea(); CTBarChart barChart = plotArea.getBarChartArray(0); List barSerList = barChart.getSerList(); //刷新内置excel数据 refreshExcel(chart, listItemsByType, fldNameArr, titleArr, showtailArr, ispercentArr); //刷新页面显示数 refreshStrGraphContent(barChart, barSerList, listItemsByType, fldNameArr, titleArr, showtailArr, ispercentArr, 1); } } } } } } } } /** * @Description:刷新数据方法(str进行分类) * @param typeChart:传递的图形类型 * @param serList:传递的serList(数据) * @param dataList:显示的数据 * @param fldNameArr:属性列 * @param position:取数的列 * @return boolean * @author nieds * @date 2019年6月11日上午10:36:56 * */ public static boolean refreshStrGraphContent(Object typeChart, List serList, List dataList, List fldNameArr,List titleArr,ListshowtailArr,List ispercentArr, int position) { boolean result=true; //更新数据区域 for (int i = 0; i < serList.size(); i++) { //CTSerTx tx=null; CTAxDataSource cat=null; CTNumDataSource val=null; CTBarSer ser = ((CTBarChart)typeChart).getSerArray(i); //tx= ser.getTx(); // Category Axis Data cat= ser.getCat(); // 获取图表的值 val = ser.getVal(); // strData.set CTStrData strData = cat.getStrRef().getStrCache(); CTNumData numData = val.getNumRef().getNumCache(); strData.setPtArray((CTStrVal[]) null); // unset old axis text numData.setPtArray((CTNumVal[]) null); // unset old values // set model long idx = 0; for (int j=0;j CTPPr ppr = p.getPPr();//获取里的 if (ppr == null) {//没有,创建 ppr = p.addNewPPr(); } // --jc开始-->> CTJc jc = ppr.getJc();//获取里的 if (jc == null) {//没有,创建 jc = ppr.addNewJc(); } //设置单元格对齐方式 jc.setVal(alignment.equals("left")?STJc.LEFT:alignment.equals("right")?STJc.RIGHT:STJc.CENTER); //水平对齐 // CTParaRPr pRpr = ppr.getRPr(); //获取里的 if (pRpr == null) {//没有,创建 pRpr = ppr.addNewRPr(); } CTFonts pfont = pRpr.getRFonts();//获取里的 if (pfont == null) {//没有,创建 pfont = pRpr.addNewRFonts(); } //设置字体 pfont.setAscii(fontName); pfont.setEastAsia(fontName); pfont.setHAnsi(fontName); CTOnOff pb = pRpr.getB();//获取里的 if (pb == null) {//没有,创建 pb = pRpr.addNewB(); } //设置字体是否加粗 pb.setVal(fontBlod ==1?STOnOff.ON:STOnOff.OFF); CTHpsMeasure psz = pRpr.getSz();//获取里的 if (psz == null) {//没有,创建 psz = pRpr.addNewSz(); } // 设置单元格字体大小 psz.setVal(bFontSize); CTHpsMeasure pszCs = pRpr.getSzCs();//获取里的 if (pszCs == null) {//没有,创建 pszCs = pRpr.addNewSzCs(); } // 设置单元格字体大小 pszCs.setVal(bFontSize); // > CTRPr rpr = r.getRPr();//获取里的 if (rpr == null) {//没有,创建 rpr = r.addNewRPr(); } //->- CTFonts font = rpr.getRFonts();//获取里的 if (font == null) {//没有,创建 font = rpr.addNewRFonts(); } //设置字体 font.setAscii(fontName); font.setEastAsia(fontName); font.setHAnsi(fontName); CTOnOff b = rpr.getB();//获取里的 if (b == null) {//没有,创建 b = rpr.addNewB(); } //设置字体是否加粗 b.setVal(fontBlod ==1?STOnOff.ON:STOnOff.OFF); CTColor color = rpr.getColor();//获取里的 if (color == null) {//没有,创建 color = rpr.addNewColor(); } // 设置字体颜色 if (content.contains("↓")) { color.setVal("43CD80"); }else if (content.contains("↑")) { color.setVal("943634"); }else { color.setVal(fontColor.substring(1)); } CTHpsMeasure sz = rpr.getSz(); if (sz == null) { sz = rpr.addNewSz(); } sz.setVal(bFontSize); CTHpsMeasure szCs = rpr.getSzCs(); if (szCs == null) { szCs = rpr.addNewSz(); } szCs.setVal(bFontSize); //-


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭