首先百科一下POI是什么:

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。通过字面意思,我们大概知道这个API是可以用来做 java 导出word 及excel 的。下面不废话了,直接总结一下,java 用模板导出 word 的方法。目前项目中我用到的方法分为两种(今天先说第一种)。

1.使用poi读取模板word,然后导出所需要的word。

先说一下准备工作:

1.1 所需jar 包:这里我使用的是poi-3.9 jar 包,下面上依赖:

org.apache.poi

poi-ooxml

3.9

org.apache.poi

ooxml-schemas

1.1

1.2  模板文件   xxxx.docx

这里要说一下有一个小坑,poi-3.9 目前只支持读取  .docx 格式的 word,也就是office 2007以后的格式。请大家注意使用时把 word 模板改为 .docx 后缀名。然后就是准备好替换的模板,如下图:

PS:这里重点说明一下,一个问题,就是在输入占位符的时候,一定一定一定要是从做到右连续输入占位符,不然会被识别为多个片段,导致占位符不匹配,!!!!!!!困扰了我半天,所以来特此记录一下0.0

下面直接上代码,注意看步骤:

String path = request.getSession().getServletContext().getRealPath("/exceldemo/关于安排2017年市级机关住房解困资金的报告.docx");//获取模板路径

FileInputStream is = new FileInputStream(path);//读入流中

XWPFDocument xdf = new XWPFDocument(is);//新建一个word文档

//变量

Map params = new HashMap();

params.put("year", year);

params.put("month", month);

params.put("day", day);

params.put("win",win);

this.replaceText(xdf,params);//替换word中的变量。

这里用了一个方法replaceText(),就是替换变量的方法,代码如下:

/**

* 替换文档中的参数(word)

* @param doc

* @param params

*/

private  void replaceText(XWPFDocument doc, Map params) {

Iterator iterator = doc.getParagraphsIterator();

XWPFParagraph para;

while (iterator.hasNext()) {

para = iterator.next();

this.replaceInPara(para, params);

}

}

/**

* 替换段落中的参数(word)

* @param para

* @param params

*/

private  void replaceInPara(XWPFParagraph para, Map params) {

List runs;

Matcher matcher;

if (matcher(para.getParagraphText()).find()) {

runs = para.getRuns();

for (int i=0; i

XWPFRun run = runs.get(i);

String runText = run.toString();

matcher = matcher(runText);

if (matcher.find()) {

while ((matcher = matcher(runText)).find()) {

runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));

}

para.removeRun(i);

//重新插入run里内容格式可能与原来模板的格式不一致

para.insertNewRun(i).setText(runText);

}

}

}

}

下面看看替换后的效果:

博客原址:https://blog.csdn.net/ahutdbx/article/details/81326092

java导出word文件损坏_记录一次POI导出word文件的细节问题相关推荐

  1. java文件损坏_用java下载文件 - 文件损坏

    这里是我的code.i写这个下载MP3苍蝇,视频文件&图像. 我用FileOutputStream中处理文件.. 的所有文件都下载好.. MP3文件working..but图像和视频被破坏用j ...

  2. java写出文本文档乱码_对象流如何写出到文件以及为什么乱码

    在写入对象文件的过程中,采用了txt文件,发现文件乱码,引发了思考. 首先需要理解好IO流是如何处理文件的. 1.ObjectOutputStream 对Java对象进行序列化处理,处理后的数据,不是 ...

  3. java io流文件损坏_java使用io流下载.docx. xlsx文件,出现文件损坏提示

    介绍 在使用io流下载服务器上的资源文件时,出现以下提示:但是选择"是"后文件可以正常打开 参考 代码如下: [codesyntax lang="java"] ...

  4. 文件格式和扩展名不匹配.文件可能已损坏_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏...

    引言 FFMpeg 是众多多媒体应用程序的核心,但该程序本身不具备一次转换多个文件的能力. 但也拦不住,FFMpeg 本身是命令行程序,可编写脚本,借助 Bash 轻松快速地构建自动化程序. 1 - ...

  5. 怎么打开avi文件文件损坏_什么是AVI文件(以及如何打开一个文件)?

    怎么打开avi文件文件损坏 A file with the .avi file extension is an Audio Video Interleave file. AVI is a common ...

  6. java搜狐笔试题_记录一次搜狐面试(包括笔试题)

    1.如何用一个div实现下图 css #demo{ width:120px; height: 120px; border:2px solid #333; border-radius: 20px; po ...

  7. java 判断视频是否损坏_内容研究(或如何判断您的内容是否损坏)

    java 判断视频是否损坏 您的内容效果如何? (How well is your content working?) In the age of data-worship, most site ow ...

  8. mysql命令导出数据不完整_使用MySQL MySqldump命令导出数据时的注意事项

    今天使用mysqldump命令备份数据的时候出现了一个问题. 一开始迁移 Discuz 7 论坛的 mysql 数据库时,采用 mysqldump 命令的时候一切顺利,但导入的时候却遇到了 ERROR ...

  9. Java利用注解实现配置动态公式并结合POI导出Excel

    利用注解实现动态配置公式并结合POI导出Excel 实现思想 创建导出对象 创建使用注解类 创建封装导出对象属性类 创建测试类 创建ExcelUtil类 实现效果 实现思想 实施顾问提出导出Excel ...

最新文章

  1. Python基础:02数字
  2. [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)...
  3. 【Java 虚拟机原理】堆区 | Java VisualVM 工具
  4. 各种排序实现以及稳定性分析
  5. 14:IO之字符字节流
  6. 【云快讯】之五十五《IBM推出Data Warehouse数据仓库云服务》
  7. 乌龟吃鱼类 -python
  8. 性能优化总结(三):聚合SQL在GIX4中的应用
  9. nvidia-rapids︱cuDF与pandas一样的DataFrame库
  10. SQL语句的执行计划
  11. Axure RP最新授权码
  12. OFD文件解析流程(转)
  13. java 调用net remoting_获取 org.springframework.remoting.RemoteAccessException: 在进行调用时无法访问远程服务?...
  14. 三星s8刷机包android10版本,三星S8+刷机包(官方固件最新升级包v7.0)
  15. Mac 谷歌浏览器chrome恶意插件劫持Any search(TotalSearchToolbox)处理
  16. 计算机电源不能启动不了,电脑不开机,常见原因有哪些,怎么处理,黑屏怎么办...
  17. 用Java写一个水仙花数算法
  18. 数据治理之主数据管理MDM
  19. 路由器和交换机常见故障信息收集命令总结
  20. Python GraphQL

热门文章

  1. 2021年山东省安全员C证新版试题及山东省安全员C证考试总结
  2. 添加arcgi移动地图点位事件
  3. 给我一个放鞭炮动画的代码,使用C#执行
  4. 天津大学四川创新研究院正式揭牌,落户成都科学城
  5. [oeasy]python0101_尾声_PC_wintel_8080_诸神的黄昏_arm_riscv
  6. vb.net 高精度定时器 1ms级
  7. 记下默认端口为80的
  8. MonoDroid学习笔记(十二)—— 您有一条新短信息,请注意查收。状态栏提醒
  9. 绘图软件surfer中文使用教程:编辑等高线图时查看参考点
  10. mysql的扩容_MySQL的InnoDB的扩容