导出段落

public void exportSummarizeWord(HttpServletResponse response, Integer id) {Summarize summarize = baseMapper.selectById(id);if (summarize!=null){XWPFDocument doc = new XWPFDocument();// 创建Word文件selectParagraph(doc, ParagraphAlignment.CENTER,"年度工作总结",true,20,20);selectParagraph(doc, ParagraphAlignment.LEFT,"名称:"+summarize.getName(),true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,"主体:"+summarize.getImplement(),true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,"级别:"+summarize.getLevel(),true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,"一、基本运行情况",true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,summarize.getOperation(),false,12,5);selectParagraph(doc, ParagraphAlignment.LEFT,"二、科技创新情况",true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,summarize.getScience(),false,12,5);selectParagraph(doc, ParagraphAlignment.LEFT,"三、年度主要开展",true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,summarize.getWork(),false,12,5);selectParagraph(doc, ParagraphAlignment.LEFT,"四、目前存在的问题和困难",true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,summarize.getProblem(),false,12,5);selectParagraph(doc, ParagraphAlignment.LEFT,"五、工作计划",true,16,20);selectParagraph(doc, ParagraphAlignment.LEFT,summarize.getPlan(),false,12,5);try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("年度总结.docx", "UTF-8"));//excel导出的路径和名称OutputStream out = response.getOutputStream();doc.write(out);out.close();} catch (IOException e) {e.printStackTrace();}}}private static void selectParagraph(XWPFDocument doc,ParagraphAlignment pa,String text,Boolean bold,Integer size,Integer position){XWPFParagraph p = null;// 新建一个段落XWPFRun r = null;//创建段落文本p = doc.createParagraph();r = p.createRun();//对齐方式p.setAlignment(pa);//字体对齐方式:1左对齐 2居中3右对齐//p.setFontAlignment(2);//文本内容r.setText(text);//是否加粗r.setBold(bold);//字体大小r.setFontSize(size);//行间距(我测试的正常文本间距为5,标题间距20)r.setTextPosition(position);}

导出效果图为

导出表格:

 XWPFDocument doc = new XWPFDocument();// 创建Word文件//创建一个6行8列的表格XWPFTable table1 = doc.createTable(6, 8);//列宽自适应table1.setWidthType(TableWidthType.AUTO);// 获取到刚刚插入的行 第一行,下标为0XWPFTableRow row1 = table1.getRow(0);// 设置单元格内容row1.getCell(0).setText("序号");row1.getCell(1).setText("指标名称");row1.getCell(2).setText("单位");row1.getCell(3).setText("数值");row1.getCell(4).setText("序号");row1.getCell(5).setText("指标名称");row1.getCell(6).setText("单位");row1.getCell(7).setText("数值");XWPFTableRow row2 = table1.getRow(1);row2.getCell(0).setText("1");row2.getCell(1).setText("核心面积");row2.getCell(2).setText("亩");row2.getCell(3).setText(garden.getKernel());row2.getCell(4).setText("6");row2.getCell(5).setText("当年总产值");row2.getCell(6).setText("万元");row2.getCell(7).setText(garden.getOverallIndustry());XWPFTableRow row3 = table1.getRow(2);row3.getCell(0).setText("2");row3.getCell(1).setText("其中:建设用地");row3.getCell(2).setText("亩");row3.getCell(3).setText(garden.getConstruction());row3.getCell(4).setText("7");row3.getCell(5).setText("第一产业产值");row3.getCell(6).setText("万元");row3.getCell(7).setText(garden.getOneIndustry());XWPFTableRow row4 = table1.getRow(3);row4.getCell(0).setText("3");row4.getCell(1).setText("示范区面积");row4.getCell(2).setText("亩");row4.getCell(3).setText(garden.getDemonstrate());row4.getCell(4).setText("8");row4.getCell(5).setText("第二产业产值");row4.getCell(6).setText("万元");row4.getCell(7).setText(garden.getTwoIndustry());XWPFTableRow row5 = table1.getRow(4);row5.getCell(0).setText("4");row5.getCell(1).setText("辐射区面积");row5.getCell(2).setText("亩");row5.getCell(3).setText(garden.getRadiation());row5.getCell(4).setText("9");row5.getCell(5).setText("第三产业产值");row5.getCell(6).setText("万元");row5.getCell(7).setText(garden.getThreeIndustry());XWPFTableRow row6 = table1.getRow(5);row6.getCell(0).setText("5");row6.getCell(1).setText("核心区从业人员");row6.getCell(2).setText("人");if (garden.getPractitioner()!=null) {row6.getCell(3).setText(garden.getPractitioner().toString());}doc.setTable(0, table1);

效果图为

XWPFParagraph对象的属性详解

创建文本对象
XWPFDocument docxDocument = new XWPFDocument();
创建段落对象
XWPFParagraph p1 = docxDocument.createParagraph();
p1.setAlignment(ParagraphAlignment.LEFT);
p1.setBorderBetween(Borders.APPLES);
p1.setBorderBottom(Borders.APPLES);
p1.setBorderLeft(Borders.APPLES);指定应显示在左边页面指定段周围的边界。
p1.setBorderRight(Borders.ARCHED_SCALLOPS);指定应显示在右侧的页面指定段周围的边界。
p1.setBorderTop(Borders.ARCHED_SCALLOPS);指定应显示上方一组有相同的一组段边界设置的段落的边界。这几个是对段落之间的格式的统一,相当于格式刷
p1.setFirstLineIndent(99);//---正文宽度会稍微变窄
p1.setFontAlignment(1);//---段落的对齐方式 1左 2中 3右 4往上 左 不可写0和负数
p1.setIndentationFirstLine(400);//---首行缩进,指定额外的缩进,应适用于父段的第一行。
p1.setIndentationHanging(400);//---首行前进,指定的缩进量,应通过第一行回到开始的文本流的方向上移动缩进从父段的第一行中删除。
p1.setIndentationLeft(400);//---整段缩进(右移)指定应为从左到右段,该段的内容的左边的缘和这一段文字左边的距和右边文本边距和左段权中的那段文本的右边缘之间的缩进,如果省略此属性,则应假定其值为零。
p1.setIndentationRight(400);//---指定应放置这一段,该段的内容从左到右段的右边缘的正确文本边距和右边文本边距和左段权中的那段文本的右边缘之间的缩进,如果省略此属性,则应假定其值为零。
p1.setIndentFromLeft(400);//---整段右移
p1.setIndentFromRight(400);
p1.setNumID(BigInteger.TEN);
p1.setPageBreak(true);//--指定当渲染此分页视图中的文档,这一段的内容都呈现在文档中的新页的开始。
p1.setSpacingAfter(6);//--指定应添加在文档中绝对单位这一段的最后一行之后的间距。
p1.setSpacingAfterLines(6);//--指定应添加在此线单位在文档中的段落的最后一行之后的间距。
p1.setSpacingBefore(6);//--指定应添加上面这一段文档中绝对单位中的第一行的间距。
p1.setSpacingBeforeLines(6);//--指定应添加在此线单位在文档中的段落的第一行之前的间距。
p1.setSpacingLineRule(LineSpacingRule.AT_LEAST);//--指定行之间的间距如何计算存储在行属性中。
p1.setStyle("");//--此方法提供了样式的段落,这非常有用.
p1.setVerticalAlignment(TextAlignment.CENTER);//---指定的文本的垂直对齐方式将应用于此段落中的文本
p1.setWordWrapped(true);//--此元素指定是否消费者应中断超过一行的文本范围,通过打破这个词 (打破人物等级) 的两行或通过移动到下一行 (在词汇层面上打破) 这个词的拉丁文字。

XWPFRun 参数详解

创建文本对象
XWPFDocument docxDocument = new XWPFDocument();
创建段落对象
XWPFParagraph p1 = docxDocument.createParagraph();
XWPFRun r1=p1.createRun();//p1.createRun()将一个新运行追加到这一段
setText(String value)或setText(String value,int pos)
r1.setText(data);
r1.setTextPosition(20);//这个相当于设置行间距的,此元素指定文本应为此运行在关系到周围非定位文本的默认基线升降的量。不是真正意义上的行间距
r1.setStrike(true);//---设置删除线的,坑人!!!
r1.setStrikeThrough(true);//也是设置删除线,可能有细微的区别吧
r1.setEmbossed(true);//变的有重影(变黑了一点)
r1.setDoubleStrikethrough(true);//设置双删除线
r1.setColor("33CC00");//---设置字体颜色
r1.setFontFamily("fantasy");
r1.setFontFamily("cursive");//---设置ASCII(0 - 127)字体样式
r1.setBold(jiacu);//---"加黑加粗"
r1.setFontSize(size);//---字体大小
r1.setImprinted(true);//感觉与setEmbossed(true)类似,有重影
r1.setItalic(true);//---文本会有倾斜,是一种字体?
r1.setShadow(true);//---文本会变粗有重影,与前面两个有重影效果的方法感觉没什么区别
r1.setSmallCaps(true);//---改变了  英文字母  的格式
r1.setSubscript(VerticalAlign.BASELINE);//---valign垂直对齐的
r1.setUnderline(UnderlinePatterns.DASH);//--填underline type设置下划线
document.createTable(2, 2);//--创建一个制定行列的表
document.enforceReadonlyProtection();//--强制执行制度保护
r1.setDocumentbackground(doc, "FDE9D9");//设置页面背景色
r1.testSetUnderLineStyle(doc);//设置下划线样式以及突出显示文本
r1.addNewPage(doc, BreakType.PAGE);
r1.testSetShdStyle(doc);//设置文字底纹

生成目录

添加pom.xml

<repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository><!--操作 Word、Excel 和 PDF 或者其他多种文件格式--><dependency><groupId>e-iceblue</groupId><artifactId>spire.office.free</artifactId><version>5.3.1</version></dependency>

Java 给现有 Word 文档添加目录

生成折线图、柱状图、饼状图

pom.xml添加:

<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>

折线图:
折线图主要有X轴,Y轴,图表,图例,数据集等相关设置。使用POI生成图表到word文档中,具体步骤如下:

  1. 创建word文档的XWPFDocument对象
  2. 创建chart图表的XWPFChart对象
  3. 创建X轴(分类轴)的XDDFCategoryAxis对象
  4. 创建Y轴(值轴)的XDDFValueAxis对象
  5. 创建折线图的XDDFLineChartData对象
  6. addSeries加载数据集
  7. 使用plot绘制折线图
  8. 输出到word文档
  9. 关闭流对象
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;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[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-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();}
}

柱状图:
柱状图主要有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;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[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-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();}
}

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

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: 2021/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[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-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();}
}

生成折线图、柱状图、饼状图原文链接:https://blog.csdn.net/u014641168/article/details/125338018

散点图

public void createScatterChart(XWPFChart chart, ScatterChartForm scatterChartForm) {// 标题chart.setTitleText(scatterChartForm.getTitle());//标题覆盖chart.setTitleOverlay(false);//图例位置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.TOP);//分类轴标(X轴),标题位置XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);bottomAxis.setTitle(scatterChartForm.getBottomTitle());//值(Y轴)轴,标题位置XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);leftAxis.setTitle(scatterChartForm.getLeftTitle());XDDFScatterChartData data = null;for (int i = 0; i < scatterChartForm.getLists().size(); i++) {// 处理数据XDDFNumericalDataSource bottomDataSource = XDDFDataSourcesFactory.fromArray(scatterChartForm.getLists().get(i).getBottomData());XDDFNumericalDataSource<Integer> leftDataSource = XDDFDataSourcesFactory.fromArray(scatterChartForm.getLists().get(i).getLeftData());// 生成数据if (data == null) {data = (XDDFScatterChartData) chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);// 是否自动生成颜色data.setVaryColors(false);}//图表加载数据,折线1XDDFScatterChartData.Series series = (XDDFScatterChartData.Series) data.addSeries(bottomDataSource, leftDataSource);//设置标记样式series.setMarkerStyle(scatterChartForm.getStyle());series.setMarkerSize(scatterChartForm.getMarkerSize());// 设置系列标题series.setTitle(scatterChartForm.getLists().get(i).getTitle(), null);// 去除连接线chart.getCTChart().getPlotArea().getScatterChartArray(0).getSerArray(i).addNewSpPr().addNewLn().addNewNoFill();if (scatterChartForm.getLists().get(i).getXddfColor() != null) {// 创建一个设置对象XDDFSolidFillProperties fillMarker = new XDDFSolidFillProperties(scatterChartForm.getLists().get(i).getXddfColor());XDDFShapeProperties propertiesMarker = new XDDFShapeProperties();// 给对象填充颜色属性propertiesMarker.setFillProperties(fillMarker);// 修改系列颜色chart.getCTChart().getPlotArea().getScatterChartArray(0).getSerArray(i).getMarker().addNewSpPr().set(propertiesMarker.getXmlObject());}}//绘制chart.plot(data);}

并列柱状图

/*** 并列柱状图显示* @throws Exception*/@Testpublic void JFreeChart4() throws Exception{//绘制柱形图// 1、创建word文档对象XWPFDocument doc = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = doc.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置
//        chart.setTitleText("使用POI创建的柱状图"); // 图表标题chart.setTitleText("");
//        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[] {"创新投入","创新绩效","创新环境","创新潜力",};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, 43};Integer[] yAxisData1 = new Integer[]{11, 40, 22, 46};Integer[] yAxisData2 = new Integer[]{15, 24, 34, 2};XDDFNumericalDataSource<Integer> yAxisSource = XDDFDataSourcesFactory.fromArray(yAxisData); // 设置Y轴数据XDDFNumericalDataSource<Integer> yAxisSource1 = XDDFDataSourcesFactory.fromArray(yAxisData1); // 设置Y轴数据XDDFNumericalDataSource<Integer> yAxisSource2 = XDDFDataSourcesFactory.fromArray(yAxisData2); // 设置Y轴数据// 7、创建柱状图对象XDDFBarChartData barChart = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);barChart.setBarDirection(BarDirection.COL); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR
//        barChart.setVaryColors(true);   //设置可变颜色// 8、加载柱状图数据集XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);XDDFBarChartData.Series barSeries1 = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource1);XDDFBarChartData.Series barSeries2 = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource2);barSeries.setTitle("平均值", null); // 图例标题barSeries1.setTitle("最大值", null); // 图例标题barSeries2.setTitle("最小值", null); // 图例标题// 9、绘制柱状图chart.plot(barChart);CTPlotArea plotArea = chart.getCTChart().getPlotArea();//柱状图1上显示数值plotArea.getBarChartArray(0).getSerArray(0).addNewDLbls();plotArea.getBarChartArray(0).getSerArray(0).getDLbls().addNewShowVal().setVal(true);plotArea.getBarChartArray(0).getSerArray(0).getDLbls().addNewShowLegendKey().setVal(false);plotArea.getBarChartArray(0).getSerArray(0).getDLbls().addNewShowCatName().setVal(false);plotArea.getBarChartArray(0).getSerArray(0).getDLbls().addNewShowSerName().setVal(false);//柱状图2上显示数值plotArea.getBarChartArray(0).getSerArray(1).addNewDLbls();plotArea.getBarChartArray(0).getSerArray(1).getDLbls().addNewShowVal().setVal(true);plotArea.getBarChartArray(0).getSerArray(1).getDLbls().addNewShowLegendKey().setVal(false);plotArea.getBarChartArray(0).getSerArray(1).getDLbls().addNewShowCatName().setVal(false);plotArea.getBarChartArray(0).getSerArray(1).getDLbls().addNewShowSerName().setVal(false);//柱状图3上显示数值plotArea.getBarChartArray(0).getSerArray(2).addNewDLbls();plotArea.getBarChartArray(0).getSerArray(2).getDLbls().addNewShowVal().setVal(true);plotArea.getBarChartArray(0).getSerArray(2).getDLbls().addNewShowLegendKey().setVal(false);plotArea.getBarChartArray(0).getSerArray(2).getDLbls().addNewShowCatName().setVal(false);plotArea.getBarChartArray(0).getSerArray(2).getDLbls().addNewShowSerName().setVal(false);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("F:\\li\\4.doc");doc.write(fos); // 导出word// 11、关闭流fos.close();doc.close();}

堆叠柱状图

    @Testpublic void JFreeChart5() throws Exception{//绘制柱形图// 1、创建word文档对象XWPFDocument doc = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = doc.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置
//        chart.setTitleText("使用POI创建的柱状图"); // 图表标题chart.setTitleText("");
//        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[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-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
//        barChart.setVaryColors(true);   //设置可变颜色// 8、加载柱状图数据集XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);
//        barSeries.setTitle("",null);
//        barSeries.setTitle("粉丝数", null); // 图例标题// 9、绘制柱状图chart.plot(barChart);Integer[] yAxisData1 = new Integer[]{25, 32, 12, 45, 45, 32,39, 102, 71, 28, 99, 89};XDDFCategoryDataSource xAxisSource1 = XDDFDataSourcesFactory.fromArray(xAxisData); // 设置X轴数据XDDFNumericalDataSource<Integer> yAxisSource1 = XDDFDataSourcesFactory.fromArray(yAxisData1); // 设置Y轴数据// 7、创建柱状图对象XDDFBarChartData barChart1 = (XDDFBarChartData) chart.createData(ChartTypes.BAR, xAxis, yAxis);barChart1.setBarDirection(BarDirection.COL); // 设置柱状图的方向:BAR横向,COL竖向,默认是BAR
//        barChart.setVaryColors(true);   //设置可变颜色// 8、加载柱状图数据集XDDFBarChartData.Series barSeries1 = (XDDFBarChartData.Series) barChart1.addSeries(xAxisSource1, yAxisSource1);
//        barSeries.setTitle("",null);
//        barSeries.setTitle("粉丝数", null); // 图例标题// 9、绘制柱状图chart.plot(barChart1);// 10、输出到word文档FileOutputStream fos = new FileOutputStream("F:\\li\\5.doc");doc.write(fos); // 导出word// 11、关闭流fos.close();doc.close();}

柱状折线组合图

   @Testpublic void JFreeChart6() throws Exception{//绘制柱形图// 1、创建word文档对象XWPFDocument doc = new XWPFDocument();// 2、创建chart图表对象,抛出异常XWPFChart chart = doc.createChart(15 * Units.EMU_PER_CENTIMETER, 10 * Units.EMU_PER_CENTIMETER);// 3、图表相关设置
//        chart.setTitleText("使用POI创建的柱状图"); // 图表标题chart.setTitleText("");
//        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[] {"2021-01","2021-02","2021-03","2021-04","2021-05","2021-06","2021-07","2021-08","2021-09","2021-10","2021-11","2021-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
//        barChart.setVaryColors(true);   //设置可变颜色// 8、加载柱状图数据集XDDFBarChartData.Series barSeries = (XDDFBarChartData.Series) barChart.addSeries(xAxisSource, yAxisSource);
//        barSeries.setTitle("",null);
//        barSeries.setTitle("粉丝数", null); // 图例标题// 9、绘制柱状图chart.plot(barChart);Integer[] yAxisData2 = new Integer[]{10, 35, 21, 46, 79, 88,39, 102, 71, 28, 99, 57};XDDFNumericalDataSource<Integer> yAxisSource2 = XDDFDataSourcesFactory.fromArray(yAxisData2); // 设置Y轴数据// 7、创建折线图对象XDDFLineChartData lineChart = (XDDFLineChartData) chart.createData(ChartTypes.LINE, xAxis, yAxis);// 8、加载折线图数据集XDDFLineChartData.Series lineSeries = (XDDFLineChartData.Series) lineChart.addSeries(xAxisSource, yAxisSource2);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("F:\\li\\6.doc");doc.write(fos); // 导出word// 11、关闭流fos.close();doc.close();}

换行

创建空白行,文字内容写,\r回车\n换行符

\r\n

单行的话,内容只用写\n就行
如果需要连续换多行写多个即可 \r\n\r\n\r\n 即为连续换三行

强制分页

XWPFDocument.createParagraph().createRun().addBreak(BreakType.PAGE)

导入图片

 //插入图片private static void createPicture(XWPFDocument doc,String urlVisit,Integer width,Integer height) throws Exception{InputStream in = null;try {XWPFParagraph firstParagraph = doc.createParagraph();XWPFRun run = firstParagraph.createRun();// 获取远程图片URL url = new URL(urlVisit);in = url.openStream();//图片输入流、图片类型、图片名称、宽度、高度run.addPicture(in, org.apache.poi.xwpf.usermodel.Document.PICTURE_TYPE_PNG, "",Units.pixelToEMU(width), Units.pixelToEMU(height));//换行run.addBreak(BreakType.TEXT_WRAPPING);} catch (InvalidFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

向指定行添加颜色

这是对指定一行设置颜色,j代表这一行有几列格

for (int j = 0; j < 5; j++) {row2.getCell(j).setColor("B4C6E7");
}

合并单元格

    /*** 跨列合并* @param table 表格* @param row 所合并的行* @param fromCell 起始列* @param toCell 终止列*/public  void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {XWPFTableCell cell = table.getRow(row).getCell(cellIndex);if ( cellIndex == fromCell ) {cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);} else {cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);}}}/*** 跨行合并* @param table 表格* @param col 所合并的列* @param fromRow 起始行* @param toRow 终止行*/public  void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {XWPFTableCell cell = table.getRow(rowIndex).getCell(col);if ( rowIndex == fromRow ) {cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);} else {cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);}}}

Java使用Poi实现导出Word段落以及表格,XWPFParagraph和XWPFRun详解,生成目录,生成折线图、柱状图、饼状图相关推荐

  1. java实现将数据生成图表至excel导出(包括折线图,柱状图,饼状图)

    1. 目的 根据已有数据,手动(java后台)生成图表至excel并导出.用于后台查询到数据后直接创建图表,可以代替直接使用图表信息字符串. 2. 说明 使用jfree图表绘制类库绘制图表,并生成到本 ...

  2. poi导出excel文件,并生成原生图表(包括折线图,柱状图,饼状图,面积图)

    前段时间,因为客户需要,要做一个导出excel文件功能,并能生成原生的图表的(不是把图片插入到excel文档),找了很多文档看,也看了很多别人的代码,个人也总结了一下,不足之处,请各位大牛谅解. 需要 ...

  3. java excel 饼图,java 导入导出excle 和 生成柱状图饼状图的demo/excle数据如何转成饼状图...

    在EXCEL中,如何把表格中的数据转换成饼状图? 在Excel中,把中的数据转换状图的操作步骤如下: 想转换的数据源,插入饼状图,Excel会自动根据选择的数据源生成饼状图.接下来,可以自定义饼状图的 ...

  4. Springboot+poi导入导出+echart 做出树状图以及饼状图

    第一步:创建springboot项目:(创建项目省略) 第二步配置:pom依赖包 <dependencies><dependency><groupId>org.sp ...

  5. 使用POI实现读取Excel数据并生成柱状图、折线图、饼状图的工具类

    最近有一个需求是要通过程序自动根据excel中的数据来动态生成相应的图表.其中就有柱状图,折线图,饼状图.但是没想到用wps生成非常的简单,一点就可以生成,使用POI生成的过程非常的难受.不得不将这次 ...

  6. Java后台生成图表——主代码(折线图,饼状图,柱状图,-》并产出图片PDF或其他格式的图片内容)

    声明: 本文采用的数据均来源于网络,本人只用于学习记录,若有侵权,还望能及时联系. Maven 的 POM 依赖 <!--必要--><!--用于jfreechart生成图片 --&g ...

  7. Word中插入表格与柱状图饼状图技术经验分享

    最近公司一个项目里要求自动生成报告功能,研究了1周多,主要实现方式是通过调用微软Office COM组件来实现操作word文档,生成段落,表格,及各种图表. 本人发现操作word地方也有几个坑人的地方 ...

  8. SpringBoot 导出 PDF 图表(折现图、饼状图等)

    主要是基于 jfreechart + itext <dependencies><dependency><groupId>org.springframework.bo ...

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

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

最新文章

  1. BZOJ-3122-随机数生成器-SDOI2013-BSGS
  2. 【Protocol Buffer】Protocol Buffer入门教程(七):导入定义
  3. 从信息检索顶会CIKM'20看搜索、推荐与计算广告新进展
  4. 严加安:想象力、直觉和灵感
  5. 机器学习算法总结之Boosting:Boosting Tree、GBDT
  6. iPhone 13 的十大爆料:“十三”到底“香不香”?
  7. linux用户limit修改,linux – 使用cgroups作为用户设置用户创建的systemd范围的MemoryLimit...
  8. hbase1.1.1 连接集群_HBase-1.2.1集群搭建
  9. python requests 安装
  10. 不光荣的“革命”——“甘露之变”后的晚唐政治
  11. U盘写保护不能格式化文件不能删除解决办法
  12. android 计时器 开始 停止 继续和暂停
  13. Unable to prase template Class Error message: Index 0 out of bounds for length 0
  14. 4月28日Java笔记109p
  15. word无法选定图片随文字移动
  16. 邮政网络与计算机网络的区别,邮政储蓄计算机网络系统分析与评价
  17. 东西方赌王“口水战”升级 措词激烈论“竞争”
  18. 【​SC17观察】美国丹佛现场直击SC17 探寻计算力增长的困局和破局
  19. 7-4 有理数加法 (15 分)
  20. 爱乐馆-无损古典之Various Artist 《飞利浦原封套系列55CD》(PHILIPS ORIGINAL JACKETS COLLECTION)[FLAC]...

热门文章

  1. 小马识途:如何优化小红书笔记排名
  2. Shader之旅2:四宫格画面实现
  3. C# 利用计算机信息实现软件注册
  4. AR+餐饮创意应用亮相微信公开课
  5. 在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统
  6. is_numeric() 函数
  7. 大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配?
  8. 列车运行图的编制原则是什么_列车运行图编制的4个原则是什么?
  9. MYSQL/ORACLE多字段去重-根据某字段去重
  10. 国产双雄:舅服它哥俩,非常好用免费的视频剪辑软件分享 | 必剪和剪映哪个好用?