日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java占位符填充_Java使用freemark生成word

發布時間:2025/3/8 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java占位符填充_Java使用freemark生成word 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、制作模板

先用office word做一個模板word文檔,${usrName}、${nowDate}占位符

可以使用 office 或者 wps 先創建一個模板表格 (替換$部分可以在 模板格式改變之后 在替換xml 格式改了后有些原本的字符會分開)

2、用office word將模板word另存為xml

3、將xml文件的后綴改為.ftl

4、編輯.ftl文件

a、用${string}替換需要動態生成的數據,這一步在制作模板的時候就已經編寫好了,這里不需要再編輯,需要主意的是在裝換成xml文件的時候,占位符可能會被分成多個,如上面的${userName}可能會被分開成${userNam和e},這時需要把e}合到${userNam標簽里面,并刪除掉e}相關的標簽。 也可以在這里進行替換 這樣不用管分開的部分 b、表格循環用標簽<#list table1 as object> (類似for (String[] object: table1 ){})

首先介紹幾個標簽,表格標簽類似HTML的

,類似HTML的。每一個單元格,下面以表1為例子:

通過關鍵搜索找到表1的,在會有一些子標簽,定義表格的一些格式,每一列的長度,我們不需要去修改標簽的任何內容和格式,因為在制作模板的時候,已經設計好了。

的子標簽還有,表示每一行的數據,所要做的是找到第二個(第一個是表格標題,固定的,不需要循環),然后刪除掉第二個后面的,接下來將第二個包裹在循環標簽<#list table1 as object> 內就行。

再接下來取出數據填充。依次找到、、、、(由于設計模板的時候,第四列里面的數據為空的,生成XML的時候是沒有和,需要自己添加,建議設計模板的時候不要留空數據,避免這種情況出現),填充1(廣州 || 37390379等)里面的數據,即將1改為${object[0]},object數組對象(<#list table1 as object> 中的object),0下標,很容易理解。

依照次方法修改其他的表格標簽,至此模板已寫完,接下來是編程部分。

package test.word;import java.awt.Desktop; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map;import freemarker.template.Configuration; import freemarker.template.Template;public class Test {/*** 獲取數據* @return* @throws Exception*/private static Map<String, Object> getData() throws Exception {Map<String, Object> map = new HashMap<String, Object>();map.put("userName", "admin");//對應模板中的${userName}map.put("nowDate", new Date().toString());//對應模板中的${nowDate}List<String[]> tablt1 = new ArrayList<String[]>();tablt1.add(new String[]{"1","廣州","838973","--"});tablt1.add(new String[]{"2","佛山","115542","--"});tablt1.add(new String[]{"3","合計","955845","--"});map.put("table1", tablt1);//<#list table1 as object></#list>//其他數據return map;}public static void main(String[] args) throws Exception {createWord(getData(), "test.ftl", "F:/test/", "test"+System.currentTimeMillis()+".doc");}/*** * @param dataMap 數據* @param templateName 模板名稱* @param filePath 保存文件路勁* @param fileName 保存文件名*/public static void createWord(Map<?, ?> dataMap, String templateName,String filePath, String fileName) {try {Configuration configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");// ftl模板文件統一放至 test.ftl包下面configuration.setClassForTemplateLoading(Test.class, "/test/word/");// 獲取模板Template template = configuration.getTemplate(templateName);File outFile = new File(filePath + File.separator + fileName);if (!outFile.getParentFile().exists()) {outFile.getParentFile().mkdirs();}// 將模板和數據模型合并生成文件Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));// 生成文件template.process(dataMap, out);out.flush();out.close();Desktop desktop = Desktop.getDesktop();desktop.open(new File(filePath + File.separator + fileName));} catch (Exception e) {e.printStackTrace();}} }

resultmap 存入需要遍歷到表格上去的數據 使用這個類里面的方法 傳入參數配置好模板即可在瀏覽器頁面實現 word導出功能

總結

以上是生活随笔為你收集整理的java占位符填充_Java使用freemark生成word的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。