freemarker 导出Excel

在项目开发中,导出Excel 是比较常见的功能, 以前用过POI导出Excel 文件, 但是POI 在使用方面比较麻烦, 而用freemarker 来导出Excel 会简单很多。


1. 创建Excel文件:student.xls ,你想生成什么样式的Excel 文件, 先做一个模板。


2. 另存为 xml 文件:  studen.xml。


3. 将student.xml 文件,copy 到Eclipse中,进行格式化:Ctrl + Shift + F

4. 替换响应的部分:

    【替换前】


    【替换后】


5. 将studnet.xml 文件重命名为 freemarker 模板文件: student.ftl . 到此,导出excel 的模板文件就制作完成了。

7. 创建一个Student 类, 作为数据模型

[java]  view plain  copy
  1. public class Student {  
  2.   
  3.     private int id;  
  4.     private String name;  
  5.     private int grade;  
  6.     private int cls;  
  7.     private float english;  
  8.     private float chinese;  
  9.     private float math;  
  10.   
  11.     public Student(Integer id, String name, int grade, int cls, float english, float chinese, float math) {  
  12.         super();  
  13.         this.id = id;  
  14.         this.name = name;  
  15.         this.grade = grade;  
  16.         this.cls = cls;  
  17.         this.english = english;  
  18.         this.chinese = chinese;  
  19.         this.math = math;  
  20.     }  
  21.   
  22.     public Student() {  
  23.         super();  
  24.     }  
  25.   
  26.     public Integer getId() {  
  27.         return id;  
  28.     }  
  29.   
  30.     public void setId(Integer id) {  
  31.         this.id = id;  
  32.     }  
  33.   
  34.     public String getName() {  
  35.         return name;  
  36.     }  
  37.   
  38.     public void setName(String name) {  
  39.         this.name = name;  
  40.     }  
  41.   
  42.     public int getGrade() {  
  43.         return grade;  
  44.     }  
  45.   
  46.     public void setGrade(int grade) {  
  47.         this.grade = grade;  
  48.     }  
  49.   
  50.     public int getCls() {  
  51.         return cls;  
  52.     }  
  53.   
  54.     public void setCls(int cls) {  
  55.         this.cls = cls;  
  56.     }  
  57.   
  58.     public float getEnglish() {  
  59.         return english;  
  60.     }  
  61.   
  62.     public void setEnglish(float english) {  
  63.         this.english = english;  
  64.     }  
  65.   
  66.     public float getChinese() {  
  67.         return chinese;  
  68.     }  
  69.   
  70.     public void setChinese(float chinese) {  
  71.         this.chinese = chinese;  
  72.     }  
  73.   
  74.     public float getMath() {  
  75.         return math;  
  76.     }  
  77.   
  78.     public void setMath(float math) {  
  79.         this.math = math;  
  80.     }  
  81.   
  82. }  

8. 写一个测试类,来生成Excel

[java]  view plain  copy
  1. import java.io.File;  
  2. import java.io.FileWriter;  
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import freemarker.template.Configuration;  
  8. import freemarker.template.Template;  
  9.   
  10. public class Test_export_Excel {  
  11.       
  12.       
  13.     /** 设置表格标题    */  
  14.     private static List<String> getTitles(){  
  15.         List<String> titles = new ArrayList<>();  
  16.         titles.add("序号");  
  17.         titles.add("姓名");  
  18.         titles.add("年级");  
  19.         titles.add("班级");  
  20.         titles.add("语文");  
  21.         titles.add("数学");  
  22.         titles.add("英语");  
  23.         return titles;  
  24.     }  
  25.       
  26.     /** 设置表格内容    */  
  27.     private static List<Student> getStudents(){  
  28.         List<Student> students = new ArrayList<>();  
  29.         for(int i=0; i<10; i++){  
  30.             Student student = new Student(100 + i, "zong_"+i, 1+i, 2+i, 90+i, 80+i, 100-i);  
  31.             students.add(student);  
  32.         }  
  33.         return students;  
  34.     }  
  35.       
  36.       
  37.     public static void main(String[] args) throws Exception{  
  38.           
  39.         //加载freemarker 模板,获取模板对象  
  40.         Configuration cfg = new Configuration();  
  41.         cfg.setDirectoryForTemplateLoading(new File("templates"));   
  42.         Template studentTemplate = cfg.getTemplate("excel_student.ftl");  
  43.           
  44.         //设置表格标题和内容  
  45.         List<String> titles = getTitles();  
  46.         List<Student> students = getStudents();  
  47.         Map root = new HashMap();  
  48.         root.put("titles", titles);  
  49.         root.put("students", students);  
  50.           
  51.         File file = new File("D:/excel_students.xls");  
  52.         FileWriter fw = new FileWriter(file);  
  53.           
  54.         //按照ftl 模板规定的样式,将root 对象里的内容写入新的文件  
  55.         studentTemplate.process(root, fw);  
  56.           
  57.         fw.flush();  
  58.         fw.close();  
  59.     }  
  60. }  

9. 生成效果图:



10. 项目包结构视图:


【注】 此种方式生成的Excel 只能用 excel 07 之后的版本打开,office 07 及之前的版本不能打开。


本文转自 http://blog.csdn.net/zgf19930504/article/details/50774337

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值