1.先看word文档模板 word文档先换成.xml格式。现阶段的word都支持另存为xml格式

2.看如下代码的作用。该段断码,只是传一个文件的路径。我们就能读取文件中的所有内容。

private static String getTemplateContext(String templatePath) {
try {
return FileUtils.readFileToString(FileUtils.getFile(templatePath), "UTF-8");                 //获取传入文件路径, 这里即为该模板中的内容。
} catch (FileNotFoundException e) {
log.debug("读取模板文件异常");
return null;
} catch (IOException e) {
log.debug("读取模板文件异常");
return null;
}
}

3.由于2中获取的内容含有${.....}  我们需要将这些$转换成我们需要的内容。如下代码就可以满足我们的需求

这里说一下 templateContext为步骤2中获取的内容。

Map propertiesMap 是一个map对象,里面为键值对  就是模板里面的${..}的值。按照步骤一。我们可以认为map对象propertiesMap为

{zhongbianzhishu=12,xingzheng=13,guyuan=14,year=2015}

private static String replaceTemplateContent(String templateContext,
Map propertiesMap) {
int tagstart = 0;
int tagend = 0;
StringBuffer sb =  new StringBuffer();
for (tagstart = templateContext.indexOf("${"); tagstart >= 0;) {
if (tagstart > tagend) {
String content = templateContext.substring(tagend, tagstart);
sb.append(content);
}
tagend = templateContext.indexOf('}', tagstart);
if (tagend > 0) {
String key = templateContext.substring(tagstart + 2, tagend).trim();
String value = propertiesMap.get(key)==null?"":propertiesMap.get(key).toString();
sb.append(value);
tagend++;
tagstart = templateContext.indexOf("${", tagend);
} else {
tagend = tagstart;
}
}
if (templateContext.length() > tagend) {
String end = templateContext.substring(tagend);
sb.append(end);
}
return sb.toString();
}

4.步骤4的作用就是讲步骤3的内容写入到我们自己定义的文本中

/**
* 将内容写入文件
* @param content
* @param filePath
*/
public static void writeFileWithEncoding(String content, String filePath,String encoding) {
try {
if (FileUtils.createFile(filePath)){
FileWriterWithEncoding fileWriter = new FileWriterWithEncoding(filePath,encoding, true);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(content);
bufferedWriter.close();
fileWriter.close();
}else{
log.info("生成失败,文件已存在!");
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 创建单个文件
* @param descFileName 文件名,包含路径
* @return 如果创建成功,则返回true,否则返回false
*/
public static boolean createFile(String descFileName) {
File file = new File(descFileName);
if (file.exists()) {
log.debug("文件 " + descFileName + " 已存在!");
return false;
}
if (descFileName.endsWith(File.separator)) {
log.debug(descFileName + " 为目录,不能创建目录!");
return false;
}
if (!file.getParentFile().exists()) {
// 如果文件所在的目录不存在,则创建目录
if (!file.getParentFile().mkdirs()) {
log.debug("创建文件所在的目录失败!");
return false;
}
}

// 创建文件
try {
if (file.createNewFile()) {
log.debug(descFileName + " 文件创建成功!");
return true;
} else {
log.debug(descFileName + " 文件创建失败!");
return false;
}
} catch (Exception e) {
e.printStackTrace();
log.debug(descFileName + " 文件创建失败!");
return false;
}

}

java 读word文档模板,同时往word文档里面插入数据相关推荐

  1. word使用dot模板以spring word 模板为例

    word使用dot模板以spring word 模板为例 觉得有用的话,欢迎一起讨论相互学习~ 首先从spring官网中下载word模板, 这个dot文件不能直接打开,本质是word2000以前的遗留 ...

  2. VC++ 多文档模板(添加新文档模板)编程实例

    现在假设要做一个VC++多文档程序,一个文档类型处理txt文件,一个文档类型处理图片文件: 新加一个Img的文档模板类型: 先新建一个多文档工程,名为duodocDemo1: 在菜单选择 插入-类: ...

  3. Apikit 自学日记:API 文档模板

    我们可以通过创建API文档模板,并使用API文档模板来添加API文档,用于实现提高API文档创建效率,规范API文档格式的目的. 该功能是付费版本功能,需要升级为企业版方可使用. 创建API文档模板 ...

  4. l易度文档管理系统-文档模板设置

    系统管理---文档模板 易度文档管理系统在系统管理提供了文档模板功能,用户可以选择预先设置的文档模板,作为新文档初始内容,也可以放置大量的文档模板文件,并且将这些模板授权给用户供其使用,用户可以选择自 ...

  5. word生成freemarker模板 并下载

    java利用freemarker生成word模板,并在网页端下载 java后台生成word技术选型 freemarker引入项目 word生成xml模板 改写生成的xml模板 后台代码 前台代码 ja ...

  6. 大公司内部的标准开发文档模板下载

    大公司内部的标准开发文档模板,包含项目研发过程文档,项目管理过程文档,机构支撑过程文档,需求文档模板.设计文档模板.编码实现文档,缺陷跟踪文档,质量保证文档,等等,又全,又好,又规范. 下载地址:ht ...

  7. java关于对于word或者pdf文件的批量下载实现,其中包括(Java实现创建word文档模板,根据模板导出word文档)

    本次需求是,pdf是表格类型的文件,我这里使用了word模板进行处理.但由于是多个文件一起导出,因此全部放到一个目录底下进行打包下载. ## 整体思路 /*** 下载思路:* 1.查询出数据后:* 2 ...

  8. Java项目中利用Freemarker模板引擎导出--生成Word文档

    应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 资源下载:https://download.csdn.net/download/weixin_41367523 ...

  9. java 将ftl文件作为模板导出word文档

    因为poi等输出word很麻烦,所以本文使用word编辑好模板,转成xml再转成ftl,在java中导入ftl模板,填充数据再生成为word下载或保存. 一.模板文档 1.在Word中编辑好word模 ...

最新文章

  1. Source Insight中的多行注释
  2. 处理时间_5_计算时间列所在年的周序号
  3. 《Spring Cloud 与 Docker 微服务架构实战》笔记
  4. 一个简单的mysql服务检测启动脚本
  5. 高性能计算机的基准测试程序包括,QX∕T 148-2020 气象领域高性能计算机系统测试与评估规范(可复制版)(40页)-原创力文档...
  6. Mysql学习总结(20)——MySQL数据库优化的最佳实践
  7. mysql的varchar与text对比
  8. 简述hdfs工作原理_HDFS 原理简述
  9. RTI_DDS自定义插件开发 6 监听者
  10. 黑帆第一季/全集Black Sails迅雷下载
  11. php yar 安装失败_php 安装yar扩展
  12. c语言日历时钟编程,基于DS1302的日历时钟(1602液晶显示DS1302时钟)C语言程序设计...
  13. 思科交换机序列号查询
  14. Python 三人斗地主手牌生成
  15. c语言求成绩中的最高分辨率大约是,一级msoffice全真机试试卷.docx
  16. 局域网、网段、子网的区别
  17. 用python画气球_452. 用最小的数量引爆气球(Python)
  18. LATEX编辑高数基础公式
  19. java 读取 application配置文件信息
  20. STM32F407基础总结系列(一)

热门文章

  1. 【TFS-CLUB社区 第6期赠书活动】〖uni-app跨平台开发与应用从入门到实践〗等你来拿,参与评论,即可有机获得
  2. Firefox 火狐浏览器清除缓存
  3. ES6新特性都有哪些
  4. Django开发环境与生产环境的配置
  5. twemproxy(1):twemproxy安装
  6. 机器学习中的数据分析和处理
  7. VR全景创业为什么要选择加盟?
  8. 数据库知识点+sql语句增删改查(详解)
  9. 通过网络Url下载图片并下载到本地相册
  10. 计算机 蚂蚁搬家 教案,幼儿园中班教案《蚂蚁搬家》含反思