JAVA利用FreeMarker生成(导出)Word文档

一、首先下载相对应的jar包:freemarker.jar;
而我的项目环境是:maven
在pom.xml中:

freemarker
freemarker
2.3.8

二、自定义Word模板,另存为.XML文件,打开进行相对应的编辑;
Word模板如下图:
JAVA利用FreeMarker生成(导出)Word文档_第1张图片
另存为.XML文件如下图:
在线格式化工具:http://tool.oschina.net/codeformat/xml/
打开xml文件,搜索start,end;将其改成:${start},${end}
其模板有遍历的内容,所有要对其设置:
搜索: 找到第一个,tr的意思不用解释了吧,代表着一行。
这也意味着找到了Table中的第一行,但是需要遍历的不是从第一行开始,而是从第二行。
好的,继续搜索,找到第二个。


 
<#list list2 as test>  



在它的头上加一个<#list 你的集合名称 as xxxx>  
ok,有开头就有结尾,玩过JSP上的EL表达式应该不会感觉很陌生吧。(比如: ${test.mir}等)
搜索

同样找到第二个,加上结束符。
好的,这样就没问题了。

 

注:我的集合名称是:list2(名称可以自定义);我的集合别名是:test(名称也可以自定义,与下面表达式的保持一致)
三、编辑完成后,把文件后缀名改成.ftl格式;


四、部分代码如下;


在table01.ftl文件中:





 
 
    Microsoft
    Microsoft
    2
    1
    2017-05-03T02:03:00Z
    2017-05-03T02:03:00Z
    1
    11
    67
    CHINA
    1
    1
    77
    12
 

 
   
   
     
     
     
     
     
   

   
     
     
     
     
     
     
   

   
     
     
     
     
     
     
   

   
     
     
     
     
     
   

   
     
     
     
     
     
   

 

 
   
   
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
   

   
     
     
     
     
       
       
     

     
       
       
       
       
       
     

   

   
     
     
   

   
     
     
     
       
       
     

     
       
       
         
         
         
         
       

     

   

   
     
     
   

   
     
     
     
     
     
     
       
         
       

       
         
         
       

       
       
     

     
       
       
       
     

   

   
     
     
     
     
     
       
       
     

   

   
     
     
     
     
     
     
       
         
         
       

       
       
     

     
       
       
       
     

   

   
     
     
     
     
     
       
       
     

   

   
     
     
     
     
     
       
       
     

   

   
     
     
     
     
     
       
     

     
       
       
         
         
         
         
         
         
       

       
         
         
         
         
       

     

   

 

 
   
   
     
   

 

 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
     
   

   
     
       
         
           
         

       

     

     
       
         
           
         

       

     

   

   
     
       
         
           
         

       

     

     
       
         
           
         

       

     

   

   
     
     
     
     
     
     
     
     
     
     
     
     
   

   
     
     
     
     
     
     
     
     
   

 

 
   
     
       
       
         
         
         
         
         
       

     

     
       
         
         
         
         
         
       

        表1:
     

     
       
         
         
         
         
         
       

        ${start}
     

     
       
         
         
         
         
         
       

       
     

     
       
         
         
         
         
         
       

        --
     

     
       
         
         
         
         
         
       

        ${end}
     

     
       
         
         
         
         
         
       

        时各区降雨量分布(单位:毫米)
     

   

   
     
       
       
         
         
         
         
         
       

     

   

   
     
       
       
         
         
         
         
         
         
       

       
     

     
       
       
       
       
     

     
       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              区域
           

         

       

       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              平均雨量
           

         

       

       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              最大累积雨量
           

         

       

       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              最大小时滑动雨量
           

         

       

     

 
 
  <#list list2 as test>
 
     
       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              ${test.area}
           

         

       

       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              ${test.rain}
           

         

       

       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              ${test.mrain}
           

         

       

       
         
           
         

         
           
             
             
               
               
               
             

           

           
             
               
               
               
             

              ${test.mir}
           

         

       

     

 
 
 
 
   

   
     
       
       
         
         
         
       

     

   

   
     
     
     
     
   

 






在yuqing2.jsp中:(部分代码)





导出到Word





在export.js中:
function table01(){
var stime = $('#day').val();
var etime = $('#end').val();
$.ajax({
type:"POST",
url:path+"/yuqing/table01",
data:{
stime:stime,
etime : etime
},
cache:false,
dataType:"json",
async:false,
success:function(data){
if(data==1){
alert("导出成功!文件存放到桌面!");
}
else{
alert("导出失败!");
}
}
});
}


在YuqingController.java中:(部分代码)
@RequestMapping(value ="/table06")
public @ResponseBody String table06(HttpServletRequest request,HttpServletResponse response,Model model){
//导出代码:开始
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8"); //设置编码
Map dataMap=new HashMap();
dataMap.put("start", stime); //开始日期
dataMap.put("end", etime); //结束日期

List> list2 = new ArrayList>();
for(int i=0;i Map map = new HashMap();
map.put("area", list.get(i).getArea().toString());
map.put("rain",list.get(i).getRain().toString());
map.put("mrain", list.get(i).getMrain().toString());
map.put("mir",list.get(i).getMir().toString());

list2.add(map);
}
dataMap.put("list2", list2);
configuration.setDirectoryForTemplateLoading(new File("F:\\4\\")); //绝对路径
Template t2=null;
try {
t2 = configuration.getTemplate("table01.ftl"); //ftl文件名
} catch (IOException e) {
e.printStackTrace();
}


File outFile = new File("C:/Users/Administrator/Desktop/word"+Math.random()*10000+".doc"); //桌面路径
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));

} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
 
try {
t2.process(dataMap, out);
out.close();  //输出流一定要关闭;否则,生成的word文档打不开
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//导出代码:结束
return "1";
}


五、导出结果如下图:
JAVA利用FreeMarker生成(导出)Word文档_第2张图片
六、参考代码如下:


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 dataMap=new HashMap();
getData(dataMap);
configuration.setClassForTemplateLoading(this.getClass(), "/com");  //FTL文件所存在的位置
//configuration.setDirectoryForTemplateLoading(new File("F:\\4\\")); //绝对路径
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)));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
 
        try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


private void getData(Map dataMap) {
dataMap.put("title", "标题");
dataMap.put("year", "2017");
dataMap.put("month", "05");
dataMap.put("day", "03");
dataMap.put("auditor", "XXX");
dataMap.put("phone", "XXXXXXXXXX");
dataMap.put("weave", "XXX");

List> list = new ArrayList>();
for (int i = 0; i < 10; i++) {
Map map = new HashMap();
map.put("number", i);
map.put("content", "内容"+i);
list.add(map);
}

dataMap.put("list", list);
}

}




你可能感兴趣的:(FreeMarker)