使用poi

您所在的位置:网站首页 wps怎么生成饼状图标图片 使用poi

使用poi

2024-07-10 09:02| 来源: 网络整理| 查看: 265

1 依赖引入

                 com.deepoove           poi-tl           1.8.2     

2 新建word模板

Word模板中所有变量以{{开头,以}}结尾,不同内容变量声明如下

1){{template}}    普通文本,渲染数据为:String或者TextRenderData

2){{#template}}   表格,渲染数据为:TableRenderData

3)当生成图表时,新建图表—>右键编辑替换文字—>{{barLineCharts}} 图表变量,如下图(可能不同版本编辑替换文字位置不同。)

3 java获取数据,生成word

1)声明模板的位置:

XWPFTemplate template = XWPFTemplate.compile("./src/main/resources/templates/template.docx");

2)导出word路径,名称

FileOutputStream out = new FileOutputStream("./src/main/resources/templates/output_"+String.valueOf(Math.random())+".docx");

 3)填充数据

//声明map存放模板中的内容 HashMap data = new HashMap(); data.put("title","hello world"); //Logger.info("hello"); /*测试文本插入------------------------------*/ //先定义文本对象 TextRenderData textRenderData = new TextRenderData(); //设置文本内容 textRenderData.setText("张三"); //设置文本格式 Style style = new Style(); style.setBold(true); style.setColor("000F00"); style.setFontSize(20); textRenderData.setStyle(style); //将文本数据和模板中变量对应 data.put("name", textRenderData); /* 测试表格插入---------------------------------------*/ //定义表格的头 //方式一 //RowRenderData headerData = RowRenderData.build("电灯名称","使用率"); //设置样式 TableStyle tStyle = new TableStyle(); tStyle.setBackgroundColor("87CEEB"); //表头方式二 /*RowRenderData headerData = RowRenderData.build( new TextRenderData("FFFFFF","仪器名称"),new TextRenderData("FFFFFF","使用率"));*/ //表头方式三 List listCellRenderDatas =new ArrayList(); CellRenderData cellRenderData1 = new CellRenderData(); cellRenderData1.setCellText(new TextRenderData("000000","电灯名称")); listCellRenderDatas.add(cellRenderData1); CellRenderData cellRenderData2 = new CellRenderData(); cellRenderData2.setCellText(new TextRenderData("000000","使用率")); listCellRenderDatas.add(cellRenderData2); CellRenderData cellRenderData3 = new CellRenderData(); cellRenderData3.setCellText(new TextRenderData("000000","使用年限")); listCellRenderDatas.add(cellRenderData3); RowRenderData headerData = new RowRenderData(listCellRenderDatas); headerData.setRowStyle(tStyle); headerData.setCells(listCellRenderDatas); List listRowList = new ArrayList(); //将数据存储为了后边生成图样式 List devname = new ArrayList(); List useRate = new ArrayList(); List useYear = new ArrayList(); for(int i = 0; i < 5; i++){ //生成一行数据 listRowList.add(RowRenderData.build("电灯_"+i,String.valueOf(Math.random()*100)+"%",String.valueOf(i+1))); //存入list,为了生成图表 devname.add("电灯_"+i); useRate.add(Math.random()*100); useYear.add(i+1); } data.put("table",new MiniTableRenderData(headerData,listRowList)); /* 测试图表的插入-------------------------------------*/ //柱状图生成 ChartMultiSeriesRenderData bar = new ChartMultiSeriesRenderData(); bar.setChartTitle("barCharts"); //参数为数组 bar.setCategories(devname.toArray(new String[devname.size()])); List seriesRenderDatas = new ArrayList(); seriesRenderDatas.add(new SeriesRenderData("使用率",useRate.toArray(new Double[useRate.size()]))); seriesRenderDatas.add(new SeriesRenderData("使用年限",useYear.toArray(new Integer[useYear.size()]))); bar.setSeriesDatas(seriesRenderDatas); data.put("barCharts",bar); //折线图生成 ChartMultiSeriesRenderData line = new ChartMultiSeriesRenderData(); line.setChartTitle("lineCharts"); //参数为数组 line.setCategories(devname.toArray(new String[devname.size()])); List seriesRenderDatas1 = new ArrayList(); seriesRenderDatas1.add(new SeriesRenderData("使用率",useRate.toArray(new Double[useRate.size()]))); seriesRenderDatas1.add(new SeriesRenderData("使用年限",useYear.toArray(new Integer[useYear.size()]))); line.setSeriesDatas(seriesRenderDatas1); data.put("lineCharts",line); //柱状图、折线图共存 ChartMultiSeriesRenderData barLine = new ChartMultiSeriesRenderData(); barLine.setChartTitle("barLineCharts"); barLine.setCategories(devname.toArray(new String[devname.size()])); List seriesRenderDatas2 = new ArrayList(); SeriesRenderData seriesRenderData1 = new SeriesRenderData(); seriesRenderData1.setName("使用率bar"); seriesRenderData1.setValues(useRate.toArray(new Double[useRate.size()])); seriesRenderData1.setComboType(SeriesRenderData.ComboType.BAR); seriesRenderDatas2.add(seriesRenderData1); SeriesRenderData seriesRenderData2 = new SeriesRenderData(); seriesRenderData2.setName("使用年限line"); seriesRenderData2.setValues(useYear.toArray(new Integer[useYear.size()])); seriesRenderData2.setComboType(SeriesRenderData.ComboType.LINE); seriesRenderDatas2.add(seriesRenderData2); SeriesRenderData seriesRenderData3 = new SeriesRenderData(); seriesRenderData3.setName("使用率line"); seriesRenderData3.setValues(useRate.toArray(new Double[useRate.size()])); seriesRenderData3.setComboType(SeriesRenderData.ComboType.LINE); seriesRenderDatas2.add(seriesRenderData3); SeriesRenderData seriesRenderData4 = new SeriesRenderData(); seriesRenderData4.setName("使用年限bar"); seriesRenderData4.setValues(useYear.toArray(new Integer[useYear.size()])); seriesRenderData4.setComboType(SeriesRenderData.ComboType.BAR); seriesRenderDatas2.add(seriesRenderData4); barLine.setSeriesDatas(seriesRenderDatas2); data.put("barLineCharts",barLine); //饼状图 ChartSingleSeriesRenderData pie = new ChartSingleSeriesRenderData(); pie.setChartTitle("饼状图"); pie.setCategories(devname.toArray(new String[devname.size()])); pie.setSeriesData(new SeriesRenderData("电灯数量",new Integer[]{120,25,89,65,49})); data.put("pie", pie);

4)写入数据导出

/*将输入写入模板中------------------------------------------*/ try { //将map数据放入模板 template.render(data); //模板数据写入 template.write(out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.flush(); out.close(); template.close();

 

只写了用到的变量,还可以导入图片,可以参考官方文档。参考链接:http://deepoove.com/poi-tl/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3