JAVA 数据导出Word文档模板的功能实现

对于这个功能,想必也有其他平台会需要吧。比如51job导出文档形式的简历这样。我在这里讲的是用java代码能满足我们实现这一功能的好用的一些方法。废话不多说了。      

 这种导出word,用XML的方式实现,相对简单。 word2003版本以后的都可以保存xml的形式。

模板:

JAVA 数据导出Word文档模板的功能实现_第1张图片


        

     保存成xml文件,用Notepad++打开编辑,并将这些需要添加的字段值用${ } 包着。这样才满足xml文件获取对应key键。

如果一张表想for循环得到多条数据,则需要在对应位置添加 <#list newList as listKey>


然后把这样xml文件另存为.ftl文件,导入.ftl模板文件到指定目录。加载jar包freemarker.jar下载

 代码如下:

public class WordUtil {  
    
	private Configuration configuration = null;  
      
    public WordUtil(){  
        configuration = new Configuration();  
        configuration.setDefaultEncoding("UTF-8");  
    }  
   
      
    public void createWord(){  
        Map dataMap=new HashMap();  
        getData(dataMap);  
        configuration.setClassForTemplateLoading(WordUtil.class, "/com/jinsuicloud/api/util");//模板文件所在路径
        Template t=null;  
        try {  
      //  	System.err.println("路径:"+WordTest.class.getClassLoader().getResource("/").toURI());
            t = configuration.getTemplate("test03.ftl"); //获取模板文件
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
       
        File outFile = new File("E:/"+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", "11");  
        dataMap.put("day", "8");   
        dataMap.put("oneName", "黎明");  
          
        List> newList = new ArrayList>();  
        for (int i = 0; i < 10; i++) {  
            Map listKey = new LinkedHashMap();  
            listKey.put("id", i);  
            listKey.put("name", "李明"+i);  
            listKey.put("age", "age"+i); 
            listKey.put("love", "love"+i); 
            newList.add(listKey);  
           
        }  
          System.err.println("12222==="+newList);
        dataMap.put("newList", newList); 
    } 
    

    public static void main(String[] args) {  
        WordUtil test = new WordUtil(); 
        Map dataMap=new HashMap();
        test.createWord();  
     //   test.getData(dataMap);
    } 
}

注意:1. ftl文件里的<#list newList as listKey>中的newList要和代码里的
 dataMap.put("newList", newList)key键一致。
      2.如果ftl文件报错,关于某个字段错了什么的。可以在前面加
 <#if myOptionalVar??>${listKey.id}  <#else> 这段代码意思是,如果id不为null,就进来,否则就进<#else>中。


你可能感兴趣的:(JAVA 数据导出Word文档模板的功能实现)