`
zx_code
  • 浏览: 96897 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java+Freemarker导出excel

    博客分类:
  • Java
阅读更多

在项目中使用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
  • 大小: 1.9 KB
2
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics