java生成word文档
2016-06-20 15:33
423 查看
java生成word借助于freemarjer.jar
1.建立一个word模板
2、将模板另存为word XML格式
3、然后用记事本将这个xml打开,Ctrl+f 查找word模板上填写的要生成的单词,用${ }给括起来。如下:
4、将此文件重命名为ftl文件,然后复制到eclipse中去
前面都准备完毕下面开始上代码:
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;
import freemarker.template.TemplateException;
public class WordTest {
private Configuration configuration = null;
public WordTest() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}
public void createWord() {
Map<String, Object> dataMap = new HashMap<String, Object>();
getData(dataMap);
configuration.setClassForTemplateLoading(this.getClass(), "/com"); // FTL文件所存在的位置
Template t = null;
try {
t = configuration.getTemplate("text.ftl"); // 文件
} catch (IOException e) {
e.printStackTrace();
}
File outFile = new File("c:/TEXT.doc");// 生成文件路径及文件命名 ;
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "UTF-8"));
} catch (Exception e1) {
e1.printStackTrace();
}
try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void getData(Map<String, Object> dataMap) {
dataMap.put("topname", "十五");
dataMap.put("name", "张三");
dataMap.put("age", "13");
dataMap.put("sex", "男");
}
public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
}
}
执行main方法就会在C:盘下生成了。
下面说一下list情况,其实很简单。
更改一下ftl文件,一样查找</w:tr>,在第一个后面加上<#list list as test>,在第二个后面加上</#list>,还有就是将之前的${ }里面的内容换成${test.xxx}。也就是将要循环生成的那行表格用这两个标签包起来。如下图:
上代码:
先建立一个例子实体:
public class Student {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
然后将之前WordTest 里的 getData方法更改如下:
private void getData(Map<String, Object> dataMap) {
dataMap.put("topname", "十五");
//这里建立一个list,(实际中应该是从数据库中读出数据封装到实体里,这里就创建两个来举例了)。
List<Student> l = new ArrayList<Student>();
Student s1 = new Student();
s1.setName("张三");
s1.setAge("11");
s1.setSex("男");
Student s2 = new Student();
s2.setName("李四");
s2.setAge("11");
s2.setSex("男");
l.add(s1);
l.add(s2);
Map<String,Object> map;
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(int i = 0; i <l.size(); i++){
map = new HashMap<String,Object>();
map.put("name", l.get(i).getName());
map.put("age", l.get(i).getAge());
map.put("sex", l.get(i).getSex());
list.add(map);
}
dataMap.put("list", list);
}
执行main方法就行了!!!
注意:生成的word跟你所建的模板的格式是相同的,一定要在建模板的时候就设置好表格内容居中、字体大小什么的。
1.建立一个word模板
2、将模板另存为word XML格式
3、然后用记事本将这个xml打开,Ctrl+f 查找word模板上填写的要生成的单词,用${ }给括起来。如下:
4、将此文件重命名为ftl文件,然后复制到eclipse中去
前面都准备完毕下面开始上代码:
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;
import freemarker.template.TemplateException;
public class WordTest {
private Configuration configuration = null;
public WordTest() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}
public void createWord() {
Map<String, Object> dataMap = new HashMap<String, Object>();
getData(dataMap);
configuration.setClassForTemplateLoading(this.getClass(), "/com"); // FTL文件所存在的位置
Template t = null;
try {
t = configuration.getTemplate("text.ftl"); // 文件
} catch (IOException e) {
e.printStackTrace();
}
File outFile = new File("c:/TEXT.doc");// 生成文件路径及文件命名 ;
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "UTF-8"));
} catch (Exception e1) {
e1.printStackTrace();
}
try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void getData(Map<String, Object> dataMap) {
dataMap.put("topname", "十五");
dataMap.put("name", "张三");
dataMap.put("age", "13");
dataMap.put("sex", "男");
}
public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
}
}
执行main方法就会在C:盘下生成了。
下面说一下list情况,其实很简单。
更改一下ftl文件,一样查找</w:tr>,在第一个后面加上<#list list as test>,在第二个后面加上</#list>,还有就是将之前的${ }里面的内容换成${test.xxx}。也就是将要循环生成的那行表格用这两个标签包起来。如下图:
上代码:
先建立一个例子实体:
public class Student {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
然后将之前WordTest 里的 getData方法更改如下:
private void getData(Map<String, Object> dataMap) {
dataMap.put("topname", "十五");
//这里建立一个list,(实际中应该是从数据库中读出数据封装到实体里,这里就创建两个来举例了)。
List<Student> l = new ArrayList<Student>();
Student s1 = new Student();
s1.setName("张三");
s1.setAge("11");
s1.setSex("男");
Student s2 = new Student();
s2.setName("李四");
s2.setAge("11");
s2.setSex("男");
l.add(s1);
l.add(s2);
Map<String,Object> map;
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
for(int i = 0; i <l.size(); i++){
map = new HashMap<String,Object>();
map.put("name", l.get(i).getName());
map.put("age", l.get(i).getAge());
map.put("sex", l.get(i).getSex());
list.add(map);
}
dataMap.put("list", list);
}
执行main方法就行了!!!
注意:生成的word跟你所建的模板的格式是相同的,一定要在建模板的时候就设置好表格内容居中、字体大小什么的。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树