首先告诉大家这篇文章的原始出处:http://www.havenliu.com/java/514.html/comment-page-1#comment-756

我也是根据他所描述完成的,但是有一些地方有点模糊,不容易弄出来.所以,我另外写一篇,让大家少走一些弯路.

上图:是Word文档中的内容,也就是模板,为了下面步鄹做铺垫,所以在需要输入数据的地方改成了拼音,

将word文档另存为xml文件.

接下来,上面写的拼音就起到作用了.

打开xml文件.搜索 title.

将Title 改为 ${title}

其他地方一样的修改。

改完后,把文件的后缀名直接改成ftl。

然后呢,直接上代码:

package com;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; public class WordTest { private Configuration configuration = null; public WordTest(){
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
} public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
} public void createWord(){
Map<String,Object> dataMap=new HashMap<String,Object>();
getData(dataMap);
configuration.setClassForTemplateLoading(this.getClass(), "/com"); //FTL文件所存在的位置
Template t=null;
try {
t = configuration.getTemplate("wordModel.ftl"); //文件名
} catch (IOException e) {
e.printStackTrace();
}
File outFile = new File("O:/outFilessa"+Math.random()*10000+".doc");
Writer out = null;
try {
// out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
              out = new OutputStreamWriter(new FileOutputStream(f), "utf-8");//使用上面的会因为编码问题造成文档无法打开
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} private void getData(Map<String, Object> dataMap) {
dataMap.put("title", "标题");
dataMap.put("year", "2012");
dataMap.put("month", "2");
dataMap.put("day", "13");
dataMap.put("auditor", "唐鑫");
dataMap.put("phone", "13020265912");
dataMap.put("weave", "占文涛");
// dataMap.put("number", 1);
// dataMap.put("content", "内容"+2); List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 10; i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("number", i);
map.put("content", "内容"+i);
list.add(map);
} dataMap.put("list", list);
}
}

大家现在可能最关心的是遍历的文件。接下来我们看如何遍历数据。

 
在刚刚的那个ftl文件中直接编辑:
打开FTL文件,搜索   <w:tr
找到第一个,tr的意思不用解释了吧,代表着一行。
这也意味着我找到了Table中的第一行,但是我需要遍历的不是从第一行开始,而是从第二行。
好的,继续搜索,找到第二个。
 
 
在它的头上加一个<#list 你的集合名称 as xxxx>
ok,有开头就有结尾,玩过JSP上的EL表达式应该不会感觉很陌生吧。
搜索 </w:tr>
同样找到第二个,加上</#list>结束符。
好的,这样就没问题了。

JAVA生成Word文档(经过测试)的更多相关文章

  1. 使用Java生成word文档(附源码)

    当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...

  2. Java生成 Word文档的并打印解决方案

    户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈. POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个 ...

  3. [转载]Java生成Word文档

    在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...

  4. [原创]Java生成Word文档

    在开发文档系统或办公系统的过程中,有时候我们需要导出word文档.在网上发现了一个用PageOffice生成word文件的功能,就将这块拿出来和大家分享. 生成word文件与我们编辑word文档本质上 ...

  5. poi读写word模板 / java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...

  6. Java生成word文档

    itext-rtf-2.1.7.jar,下载地址:http://download.csdn.net/detail/xuxu198899223/7717727 itext-2.1.7.jar 下载地址: ...

  7. java使用freemarker 生成word文档

      java 生成word文档     最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的 ...

  8. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  9. FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...

随机推荐

  1. Linux服务器注意事项

    1.在Linux新建一个tomcat目录,执行里面的文件运行的时候 会出现权限不足的提示?解决办法:这是因为新建的文件夹,对于可执行脚本,必须先授权,进入bin目录后,执行命令  chmod 764 ...

  2. HBase-过滤器(各种过滤器及代码实现)

    过滤器简介 HBase过滤器提供了非常强大的特性来帮助用户提高其处理表中数据的效率. HBase中两种主要的数据读取函数是get和scan,它们都支持直接访问数据和通过指定起止行键访问数据的功能.可以 ...

  3. EXTJS4.2 级联 下拉

    items: [ { xtype: "fieldcontainer", layout: "hbox", items: [{ xtype: 'combo', na ...

  4. PAT1058. A+B in Hogwarts (20)

    #include <iostream> using namespace std; int ag,as,ak; int bg,bs,bk; int cg,cs,ck; int main(){ ...

  5. mac 下面配置gradle

    最近刚开始用gradle,先向大家介绍一下怎么配置gradle的环境变量吧: 1.下载最新安装包gradle-xxx-all.zip:http://www.gradle.org,并解压到/Users/ ...

  6. iOS定位和位置信息获取

    要实现地图.导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作.Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图 ...

  7. RGB(16进制)_转_TColor

    ZC:内存中 COLORREF就是一个DWORD(从定义"COLORREF = DWORD;"就可以看出来),但是 具体的byte R/G/B 的位置是怎么方式的? ZC:Wind ...

  8. Delphi_按字节比较两个文件

    1.界面 2.代码 procedure TForm1.btnSelectFile01Click(Sender: TObject); begin if OpenDialog1.Execute then ...

  9. jquery——简单的下拉列表制作及bind()方法的示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Eclipse Dynamic Web Module 3.0 requires Java 1.6 or newer && Filter mapping specifies an unknown filter name characterEncodingFilter

    一直在宇宙最强的 IDE 下生长的,自然很难习惯 eclipse 这种开源且免费且各种版本且各种定制的 IDE 下没有少吃苦头. 最近用 maven 搭建了一个 springmvc/mybatis 的 ...