當想要讀寫word、excel,在網上查找資料大部分都是POI,但咱們要動態生成word文檔時,首先要考慮的就是要保持word文檔中的複雜樣式,這時候咱們就應該考慮Freemarker的模板技術快速的實現這個功能。java
1、word讀寫實現思路:web
1.首先,將你須要的word文檔用word2003打開(我只試過這個版本,可能別的版本的word可能也行,能夠考慮試一下。可是wps再轉換時就出問題了)。測試
2.將要動態替換的數據用${}替換,文件另存爲,選擇XMl格式,存爲*.xml文件。spa
3.而後利用freemarker技術動態輸出wor文檔。excel
具體實現以下:xml
1).建立帶有格式的word文檔(我只用過word2003),將須要動態展現的數據用變量符替換。對象
注意:數據替換時純手打或者總體複製,不能${}手打,中間變量複製,這樣在生成.xml文檔時會有問題。blog
2).將剛剛建立的word文檔保存爲.XMl格式。(可在文檔中找一下變量符,看是不是一個總體。)utf-8
3).從freemarker官網下載最新的jar包,將其拷貝到本身的開發項目中開發
4).新建freemarkerUtil類,實現可用freemarker技術根據xml模板生成word的方法。
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.*;
import java.util.Map;
public class Freemarker {
Configuration configuration = null;
public Freemarker() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}
public void createDoc(Map dataMap,File readFile,File outFile,String fileName) {
// 設置模本裝置方法和路徑
Template t = null;
try {
configuration.setDirectoryForTemplateLoading(readFile);
t = configuration.getTemplate(fileName); // 裝載.xml模板
} catch (IOException e) {
e.printStackTrace();
}
// 輸出文檔路徑及名稱
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();
}
}
}
5).創建測試類,試驗是否可以成功。
下面是源碼:
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.TemplateException;
public class FreeMarkerTest {
public static void main(String[] args) throws IOException, TemplateException {
Freemarker tf = new Freemarker();
String filePath = "D:\\project\\src\\web_src\\test\\template";
Map dataMap = new HashMap();
dataMap.put("tansferMemberName", "轉讓方");
dataMap.put("prodName", "產品1");
dataMap.put("prodCode", "prodCodeOne");
File readFile = new File(filePath);
File outFile = new File("D:/outFileDoc.doc");
String fileName = "word.xml";
tf.createDoc(dataMap, readFile, outFile, fileName);
}
}
2、excel讀寫的具體實現:
excel的具體實現yuword相似,只不過在生成模板中須要對模板進行調整
excel中若是要傳入List,須要在模板中對要循環的部分用<#List list名稱 as 對象></#List>包裹起來。