Apache POI Word(docx) 入门示例教程

本文档为Apache POI Word(docx)的简短示例教程,主要通过示例介绍XWPFXXX API的基本使用方法,最后一节介绍了poi-tl模板引擎提供的增强API的使用。

1. 文档XWPFDocument

XWPFDocument是对 .docx 文档操作的高级封装API。

1.1. 创建新文档

XWPFDocument doc = new XWPFDocument();

1.2. 读取已有文档:段落、表格、图片

XWPFDocument doc = new XWPFDocument(new FileInputStream("./deepoove.docx"));

接下来我们就可以读取文档内容,包括段落、表格、图片等:

1// 段落 2List<XWPFParagraph> paragraphs = doc.getParagraphs(); 3// 表格 4List<XWPFTable> tables = doc.getTables(); 5// 图片 6List<XWPFPictureData> allPictures = doc.getAllPictures(); 7// 页眉 8List<XWPFHeader> headerList = doc.getHeaderList(); 9// 页脚 10List<XWPFFooter> footerList = doc.getFooterList();

1.3. 生成文档

通过传入一个OutStream,将文档写入流:

1try (FileOutputStream out = new FileOutputStream("simple.docx")) { 2 doc.write(out); 3}

2. 段落XWPFParagraph

段落是构成Word文档的一个基本单元。

2.1. 创建新段落

XWPFParagraph p1 = doc.createParagraph();

2.2. 设置段落格式

1// 对齐方式 2p1.setAlignment(ParagraphAlignment.CENTER); 3// 边框 4p1.setBorderBottom(Borders.DOUBLE); 5p1.setBorderTop(Borders.DOUBLE); 6p1.setBorderRight(Borders.DOUBLE); 7p1.setBorderLeft(Borders.DOUBLE); 8p1.setBorderBetween(Borders.SINGLE);

2.3. 基本元素XWPFRun

创建好段落后,我们就可以通过相关API处理段落内的文本和图片了。XWPFRun是段落的基本组成单元,它可以是一个文本,也可以是一张图片。

2.4. 段落文本

2.4.1. 读取段落内容

1// 获取文字 2String text = paragraph.getText(); 3 4// 获取段落内所有XWPFRun 5List<XWPFRun> runs = paragraph.getRuns();

2.4.2. 创建XWPFRun文本

1// 段落末尾创建XWPFRun 2XWPFRun run = paragraph.createRun(); 3run.setText("为这个段落追加文本");

2.4.3. 插入XWPFRun文本

1// 段落起始插入XWPFRun 2XWPFRun insertNewRun = paragraph.insertNewRun(0); 3insertNewRun.setText("在段落起始位置插入这段文本");

2.4.4. 修改XWPFRun文本

1List<XWPFRun> runs = paragraph.getRuns(); 2// setText默认为追加文本,参数0表示设置第0个位置的文本,覆盖上一次设置 3runs.get(0).setText("追加文本", 0); 4runs.get(0).setText("修改文本", 0);

2.4.5. 样式:颜色、字体

1// 颜色 2run.setColor("00ff00"); 3// 斜体 4run.setItalic(true); 5// 粗体 6run.setBold(true); 7// 字体 8run.setFontFamily("Courier"); 9// 下划线 10run.setUnderline(UnderlinePatterns.DOT_DOT_DASH);

2.4.6. 文本换行

run.addCarriageReturn();

2.5. 段落图片

2.5.1. 提取图片XWPFPicture

1List<XWPFPictureData> allPictures = doc.getAllPictures(); 2XWPFPicture pciture = allPictures.get(0); 3byte[] data = pciture.getPictureData().getData(); 4// 接下来就可以将图片字节数组写入输出流

2.5.2. 创建XWPFRun图片

1import org.apache.poi.util.Units; 2 3InputStream stream = new FileInputStream("./sayi.png"); 4XWPFRun run = paragraph.createRun(); 5run.addPicture(stream, XWPFDocument.PICTURE_TYPE_PNG, "Generated", Units.toEMU(256), Units.toEMU(256));

3. 表格XWPFTable

表格是构成Word文档的另一个重要基本元素。

3.1. 创建新表格

创建一个三行三列的表格:

XWPFTable table = doc.createTable(3, 3);

3.2. 设置单元格文本

表格是由表格行XWPFRow构成,每行是由单元格XWPFCell构成,每个单元格内部又是由许多XWPFParagraph段落构成。

table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE");

上面这一段代码和下面这一段代码是等价的:

1XWPFParagraph p1 = table.getRow(0).getCell(0).addParagraph(); 2XWPFRun r1 = p1.createRun(); 3r1.setText("EXAMPLE OF TABLE");

3.3. 设置单元格图片

图片操作其实就是获取段落,然后等同操作段落中的图片。

1XWPFParagraph p1 = table.getRow(0).getCell(0).addParagraph(); 2XWPFRun r1 = p1.createRun(); 3// 同段落图片

3.4. 设置单元格样式:背景色、对齐方式

1// 背景色 2cell.setColor(cellStyle.getBackgroundColor()); 3 4// 获取单元格段落后设置对齐方式 5XWPFParagraph addParagraph = cell.addParagraph(); 6addParagraph.setAlignment(ParagraphAlignment.CENTER);

4. poi-tl:Word模板引擎

poi-tl(poi template language)是基于Apache POI的Word模板引擎,完整的文档参见poi-tl官方文档,本小节不打算介绍模板引擎,主要讲解如何使用poi-tl里面对poi的增强API。

4.1. TableTools

TableTools 提供了若干操作表格的方法。

4.1.1. 同一行单元格合并某几列

1// 合并第一行的第0列到第8列单元格 2TableTools.mergeCellsHorizonal(table, 1, 0, 8);

4.1.2. 同一列单元格合并某几行

1// 合并第0列的第一行到第九行的单元格 2TableTools.mergeCellsVertically(table, 0, 1, 9);

4.1.3. 表格宽度

1// 设置表格宽度为A4纸最大宽度 2TableTools.widthTable(table, MiniTableRenderData.WIDTH_A4_FULL, 10);

4.1.4. 表格样式

1// 设置表格居中 2TableStyle style = new TableStyle(); 3style.setAlign(STJc.CENTER); 4TableTools.styleTable(table, style);

4.2. NiceXWPFDocument

NiceXWPFDocument 是对原生 XWPFDocument 的增强。

4.2.1. 某个位置插入表格

1NiceXWPFDocument doc = new NiceXWPFDocument(new FileInputStream("./deepoove.docx")); 2 3// 在某个run位置插入10行10列的表格 4// XWPFRun run = ... 5XWPFTable table = doc.insertNewTable(run, 10, 10);

4.2.2. 某个位置插入段落

1// 在某个run位置插入段落 2// XWPFRun run = ... 3doc.insertNewParagraph(run);

4.2.3. Word合并

1NiceXWPFDocument main = new NiceXWPFDocument(new FileInputStream("main.docx")); 2 3NiceXWPFDocument sub = new NiceXWPFDocument(new FileInputStream("sub.docx")); 4 5// 合并两个文档 6NiceXWPFDocument newDoc = main.merge(sub); 7 8// 生成新文档 9FileOutputStream out = new FileOutputStream("new_doc.docx"); 10doc.write(out); 11doc.close(); 12out.close();

5. 关于作者

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

js 数组 转为树形结构

需要转换为树形的数组vardata{"orderById":null,"platformCommissionProportion":1,"name":"添加剂","pid":13,"id":26

Apache POI Word(docx) 入门示例教程 - HelloWorld