JAVA 使用FREEMARKER制作EXCEL

背景:最近有一个需求要制作一个样式十分丰富的EXCEL,使用POI技术无法很好的满足需求,才开始使用了FREEMARKER制作,它不仅可以做EXCEL也可以做WORD。

需要的JAR:点我下载

下面先简单说下思路:

1.创建freemarker模版

2.代码中调用freemarker模版

3.为模版设置值


详解:

一.制作freemarker模版:


1.使用EXCEL制作如上图所示的模版,可以设置好模版的样式(颜色等),在需要设置值的地方使用${} 符号填充,freemarker会根据${}里面的变量找到这个单元格,然后用新的值将其替换。

2.将EXCEL另存为2003版本的xml格式,会弹出警告,选择'是'。

3.打开xml文件


找到刚刚写的${talkDate},这边要确定一下它是否还是${talkDate} 这个格式,因为有时候这个变量会被excel格式化掉。

4.将xml文件改为freemarker要求的ftl文件,只要将xml后缀名改为ftl就OK了。

5.使用java代码操作:

package com.nd.app;

import java.io.BufferedWriter;
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 freemarker.template.Configuration;
import freemarker.template.Template;

public class TestFreemakre {
	private static Configuration configuration = null;
	private static Template t = null;

	static {
		configuration = new Configuration();
		configuration.setDefaultEncoding("utf-8");

		try {
			// 设置模版存放地址
			configuration.setDirectoryForTemplateLoading(new File("/Users/JJC/Downloads/"));
			configuration.setDefaultEncoding("utf-8");
			// 读取模版
			t = configuration.getTemplate("project_talk_template.ftl");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
		}
	}

	public static void main(String[] args) throws Exception {
		try {
			Map<String, Object> wr = new HashMap<String, Object>();
			wr.put("talkDate", "111111111");
			wr.put("talkWay", "111111111");

			File outFile = new File("/Users/JJC/Downloads/111111.xls");
			FileOutputStream fos = new FileOutputStream(outFile);
			OutputStreamWriter oWriter = new OutputStreamWriter(fos, "UTF-8");
			Writer out = new BufferedWriter(oWriter); // 这边使用 new
														// FileWriter就不行,不知道为啥
			t.process(wr, out);
			out.close();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



注意:要替换的值不能是null,可以是空字符串。在xml里面可以使用if ,也能使用list循环。格式如:

<#if sheetType == 2> 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值