在项目中使用Freemarker功能如下:
1.一般我们在项目中使用freemarker最多的是做页面功能,我们只需要model+html+freemarker标签,生成我们需要的页面。
2.我们可以使用freemarker标签功能,我们可以动态生成sql语句等等
3.我们可以使用freemarker导出excel和word等等
本文介绍freemarker导出excel功能
freemarker代码如下:
<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> </head> <body> <table border="1"> <tr> <th>标题1</th> <th>标题2</th> <th>标题3</th> </tr> <!--判读是否有值--> <#if datas??&&((datas?size)>0)> <#list datas as data> <tr> <td>${data.id!''}</td> <td>${data.name!''}</td> <td>${data.age!''}</td> </tr> </#list> </#if> </table> </body> </html>
spring配置如下:
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/freemarker/" /> <property name="defaultEncoding" value="UTF-8" /> <property name="freemarkerSettings" ref="freemarkerConfiguration" /> </bean>
java代码如下:
package test; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.taglibs.standard.tag.common.core.OutSupport; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfig; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class ExcelExport { @Resource private FreeMarkerConfig freeMarkerConfig; @Test public void exportExce() { try { List<Test> list = testService.queryForList(); //指定freemarker的加载基本路径,重要 freeMarkerConfig.getConfiguration().setDirectoryForTemplateLoading(new File("D:\\java\\test\\WebROOT\\WEB-INF\\freemarker\\")); //获取模板 Template template = freeMarkerConfig.getConfiguration().getTemplate("admin\\excel\\test1.ftl"); //xlsx最大容纳1048576行 ,csv最大容纳1048576行,xls最大容纳65536行 //86000 for(int i=0; i < 10; i++) { list.addAll(list); } Map<String, Object> map = new HashMap<String, Object>(); map.put("datas", list); createExcel(template, map); } catch (Exception e) { e.printStackTrace(); } } private void createExcel(Template template, Map<String, Object> map) { try { Writer out = new OutputStreamWriter(new FileOutputStream("E:\\123.xlsx")); template.process(map, out); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
excel样式如下
注意:如果数据量大于65536甚至更大,freemarker很难分sheet导出,所以就可以生成几个excel,然后压缩并下载
欢迎交流企鹅群:211367604