導出生成word的簡單方法


以實現簡單的word導出:

 

然后將word另存為.xml文件,打開文件,找到title將其修改為${title},后面要替換的內容依次替換掉。然后將.xml文件后綴改為.ftl,導入.ftl模板文件到指定目錄。加載jar包freemarker.jar。

代碼如下:

 1 import java.io.BufferedWriter;
 2 import java.io.File;
 3 import java.io.FileOutputStream;
 4 import java.io.OutputStreamWriter;
 5 import java.io.Writer;
 6 import java.net.URLDecoder;
 7 import java.util.HashMap;
 8 import java.util.Map;
 9 
10 import freemarker.template.Configuration;
11 import freemarker.template.Template;
12 import freemarker.template.Version;
13 
14 public class WordUtil {
15 
16     public static void main(String[] args) {
17         // 替換的數據詞典
18         Map<String, Object> dataMap = new HashMap<String, Object>();
19         dataMap.put("date", "2020年8月");
20         dataMap.put("maxTemp", "非洲,南美洲");
21         dataMap.put("minTemp", "非洲,南美洲sss");
22         wordOutput(dataMap, "test.ftl", "D:/t.doc");
23     }
24 
25     public static void wordOutput(Map<String, Object> dataMap, String sourceName, String targetPath) {
26         try {
27             // Configuration 用於讀取ftl文件
28             Configuration configuration = new Configuration(new Version("2.3.28"));
29             configuration.setDefaultEncoding("utf-8");
30 
31             /**
32              * 以下是兩種指定ftl文件所在目錄路徑的方式,注意這兩種方式都是 指定ftl文件所在目錄的路徑,而不是ftl文件的路徑
33              */
34             // 指定路徑的第一種方式(根據當前類的相對路徑指定)
35             // configuration.setClassForTemplateLoading(WordUtil.class, "");
36 
37             // 指定路徑的第二種方式,獲取項目中resources目錄下的文件
38             String resourcesPath = WordUtil.class.getResource("/").getPath();
39             // 處理路徑中的中文亂碼問題
40             String path = URLDecoder.decode(resourcesPath, "utf-8");
41             System.out.println(path);
42             configuration.setDirectoryForTemplateLoading(new File(path));
43 
44             // 輸出文檔路徑及名稱
45             File outFile = new File(targetPath);
46 
47             // 以utf-8的編碼讀取ftl文件
48             Template template = configuration.getTemplate(sourceName, "utf-8");
49             Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
50             template.process(dataMap, out);
51             out.close();
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55     }
56 }
View Code

模板存放位置:文檔模板存放在項目的resource下,方便打包和整潔

這個地方嘗試了很久,才獲取到項目的resource目錄,當然也可以直接指定本地磁盤的目錄

// 指定路徑的第二種方式,獲取項目中resources目錄下的文件
            String resourcesPath = WordUtil.class.getResource("/").getPath();
            // 處理路徑中的中文亂碼問題
            String path = URLDecoder.decode(resourcesPath, "utf-8");
            System.out.println(path);
            configuration.setDirectoryForTemplateLoading(new File(path));

文檔模板存放截圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM