java使用freemarker作为模板导出Excel表格
1:首先新建一个excel表格自己弄好格式如下图
2:把excel 表格另存为xml格式文件如下图
3:这个时候的文件就是xml 格式的文件了,在myeclipse里面项目工程里面新建一个文件后缀为.ftl 然后把弄好的xml文件内容直接复制粘贴到.fl文件里面
如图
4:好了,现在我们直接java 后台action 类代码如下
/**
* 导出订单表
* @throws Exception
*/
public void exportOrder() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
Map map = new HashMap();
BookOrder bookOrder = new BookOrder();
bookOrder.setOrderNo(params.getOrderNo());
bookOrder.setName(params.getName());
bookOrder.setPhone(params.getPhone());
if(params.getCompany() !=null && params.getCompany().getId() !=null){
bookOrder.setCompany(companyService.load(params.getCompany().getId()));
}
bookOrder.setOrderStatus(params.getOrderStatus());
bookOrder.setDistType(params.getDistType());
bookOrder.setFoodType(params.getFoodType());
bookOrder.setStartTime(params.getStartTime());
bookOrder.setEndTime(params.getEndTime());
bookOrder.setRefundStatus(params.getRefundStatus());
bookOrder.setReminder(params.getReminder());
if(params.getStall() !=null && params.getStall().getId() !=null){
bookOrder.setStall(stallService.load(params.getStall().getId()));
}
List bookOrderList = (List)targetService.loadList(bookOrder);
map.put("bookOrderList", bookOrderList);
File file = null;
InputStream inputStream = null;
ServletOutputStream out = null;
try {
request.setCharacterEncoding("UTF-8");
file = ExcelUtils.createExcel(map, "myExcel","order.ftl");//调用创建excel帮助类
inputStream = new FileInputStream(file);
response.setCharacterEncoding("utf-8");
response.setContentType("application/msexcel");
response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode("订单统计" + ".xls", "UTF-8"));
out = response.getOutputStream();
byte[] buffer = new byte[512]; // 缓冲区
int bytesToRead = -1;
// 通过循环将读入的Excel文件的内容输出到浏览器中
while ((bytesToRead = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null)
inputStream.close();
if (out != null)
out.close();
if (file != null)
file.delete(); // 删除临时文件
}
}
5:下面这个是Utils 公共方法如下
package com.funcanteen.business.action.pay.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* 导出excel Utils
* @author Administrator
*
*/
public class ExcelUtils {
private static Configuration configuration =null;
private static Map allTemplates =null;
private static String realPath = ServletActionContext.getServletContext().getRealPath("/");
/*static{
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
try {
configuration.setDirectoryForTemplateLoading(new File(realPath+"WEB-INF/mailtemplate"));
allTemplates = new HashMap();
allTemplates.put("myExcel", configuration.getTemplate("order.ftl"));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}*/
public ExcelUtils(){
throw new AssertionError();
}
/**
* 创建excel
* @param dataMap
* @param type
* @return
*/
public static File createExcel(Map<?, ?> dataMap, String type,String valueName){
try {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setDirectoryForTemplateLoading(new File(realPath+"WEB-INF/mailtemplate"));
allTemplates = new HashMap();
allTemplates.put(type, configuration.getTemplate(valueName));
} catch (IOException ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
String name = "temp" + (int) (Math.random() * 100000) + ".xls";
File file = new File(name);
Template template = allTemplates.get(type);
try {
Writer w = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
template.process(dataMap, w);
w.close();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return file;
}
}
6下面是ftl 模板文件
<?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?>Administrator Administrator 2008-09-11T17:22:52Z 2016-12-22T05:40:25Z 12.00 5715 12765 0 105 False False
<#if bookOrderList?? > <#list bookOrderList as bookOrder>
所属饭堂 | 所属档口 | 订单号 | 下单人 | 联系电话 | 地址 | 下单时间 | 订单原价 | 订单价格 | 优惠价格 | 快递费 | 打包费 | 快递方式 | 用餐类型 | <#if bookOrder.company ??>
#list> #if>${bookOrder.company.simpleName?if_exists} | <#else>#if> <#if bookOrder.stall ??> | ${bookOrder.stall.simpleName?if_exists} | <#else>#if> | ${bookOrder.orderNo?if_exists} | ${bookOrder.name?if_exists} | ${bookOrder.phone?if_exists} | ${bookOrder.address?if_exists} | ${bookOrder.createTime?string("yyyy-MM-dd HH:mm:ss")} | ${bookOrder.orderPrice?default(0)?double + bookOrder.benefitPrice?default(0)?double - bookOrder.expressCharge?default(0)?double - bookOrder.packCharge?default(0)?double} | ${bookOrder.orderPrice?if_exists} | ${bookOrder.benefitPrice?if_exists} | ${bookOrder.expressCharge?if_exists} | ${bookOrder.packCharge?if_exists} | <#if bookOrder.distType ?? && bookOrder.distType==0>自提 | #if> <#if bookOrder.distType ?? && bookOrder.distType==1>快递 | #if> <#if bookOrder.foodType ?? && bookOrder.foodType==1>早餐 | #if> <#if bookOrder.foodType ?? && bookOrder.foodType==2>午餐 | #if> <#if bookOrder.foodType ?? && bookOrder.foodType==3>晚餐 | #if> <#if bookOrder.foodType ?? && bookOrder.foodType==4>宵夜 | #if> <#if bookOrder.foodType ?? && bookOrder.foodType==5>下午茶 | #if> <#if bookOrder.foodType ?? && bookOrder.foodType==6>零食 | #if>9 600 600 3 4 10 False False
False False
False False