导出数据到指定的word模板上

         关于Freemarker生成word的使用(java生成word)

用freemarker做了一个项目,把使用心得留下来以便学习.

Freemarker具体的是什么就不解释了,不明白的同学可以baidu.

   我主要是用这个开源的控件做word的动态生成,

    首先客户需要的word一般性都有模板,我们只要改动其中的一部分值就可以了,比如姓名,日期,表名,表中数据等.第一步要做的就是,把着些要改动的地方找出来,打上标记.比如一个X 或者随便的什么,好方便自己查找.

     第二步就是把word模板,转化为xml文件(word可以另存为xml的),用UE等工具打开,eclipse也可以,注意字符编码,word的字符编码为utf-8,所以打开是最好是先不要改动,先看编码是否正确(不正确的改下字符编码),然后寻找你刚才在word中留下的标记,把他们换成freemarker标记.---友情提醒, eclipse可以自动排版xml.

     比如把姓名换成${username},日期换成${date},等至于表格,因为是,xml所以是可以找到表结构的.例如

Word是这样的

 

XMl是这样的:

一般是这么做的,先把表格外面的数据都替换了,每个标记不相同就行.

比如

接下来是表格:表格应为是重复的多条数据所以可以这么来:
在表格的开头(表头之下,数据开始的地方)打上标记:

在结尾在打上标记

替换表里的每个字段:

然后保存:

我的xml的保存文件名叫test2.xml.等下会用到这个

接下来开始写程序:

首先你要有这些;就是freemarker的开源包,百度一个,导入就好,

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

 

接下来这么做:

目录:

TheFreemarker:

 

import java.io.BufferedWriter;

import java.io.File;

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

    private Configuration configuration = null;

 

    public TheFreemarker() {

       configuration = new Configuration();

       configuration.setDefaultEncoding("UTF-8");

    }

 

    public void createDoc() {

       // 要填入模本的数据文件

       Map dataMap = new HashMap();

       getData(dataMap);

       // 设置模本装置方法和路径

       // 这里我们的模板是放在src.model包下面

       configuration.setClassForTemplateLoading(this.getClass(),

              "model");

       Template t = null;

       try {

           t = configuration.getTemplate("test2.xml");   // 装载test2.xml模板

       } catch (IOException e) {

           e.printStackTrace();

       }

       // 输出文档路径及名称

       File outFile = new File("D:/outFileDoc.doc");

       Writer out = null;

       try {

           out = new BufferedWriter(new OutputStreamWriter(

                  new FileOutputStream(outFile),"utf-8"));

       } catch (Exception e1) {

           e1.printStackTrace();

       }

 

       try {

           t.process(dataMap, out);

       } catch (TemplateException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

    /**

     * 注意dataMap里存放的数据Key值要与模板中的参数相对应

     * @param dataMap

     */

    private void getData(Map dataMap) {

       dataMap.put("name", "小新与小白");//姓名 xml里的标记为${name}

       dataMap.put("Tdate", "2011-12-02");//时间 xml里的标记为${Tdate}

    dataMap.put("address", "北京海淀区");//时间 xml里的标记为${address}

       List table2 = new ArrayList();

       for (int i = 0; i < 5; i++) {

           Table2 t = new Table2();

           t.setApplyno("BBBBBBBB-BB");

           t.setCustname("小新");

           t.setLoandate("2012-12-12");

           t.setRegion("999-999");

           table2.add(t);

       }

       dataMap.put("table2", table2);

    }

}

 

Table2 为

 

 

public class Table2 {

    private String applyno;

 

    private String custname;

 

    private String loandate;

 

    private String region;

 

    public StringgetApplyno() {

       return applyno;

    }

 

    public void setApplyno(String applyno) {

       this.applyno = applyno;

    }

 

    public String getCustname() {

       return custname;

    }

 

    public void setCustname(String custname) {

       this.custname = custname;

    }

 

    public String getLoandate() {

       return loandate;

    }

 

    public void setLoandate(String loandate) {

       this.loandate = loandate;

    }

 

    public String getRegion() {

       return region;

    }

 

    public void setRegion(String region) {

       this.region = region;

    }

 

}

 

 

 

测试类:

 

 

public class Pptest {

    public static void main(String[] args) {

       TheFreemarker tf=new TheFreemarker();

       tf.createDoc();

    }

 

}

执行结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值