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

1、制作模板

e8387618a75308df7fa68100b09e2b6f.png

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

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

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

2113de07ccd355337ba36af88444c9ad.png

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

4、編輯.ftl文件

150b53ca751d99714d8ccadbdc200323.png

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下標,很容易理解。

4024e71681e2a036ed7e9908c402397e.png

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

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();}}
}

8875e24b964f0c1e9b0cc3a5d533551a.png

c31f10ecf644822a3717bfeefeabc964.png

ada60dc761686a958e5fe334d28369cb.png

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536999.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java中如何使用非阻塞異步編程——CompletableFuture

分享一波:程序員賺外快-必看的巔峰干貨 對于Node開發者來說&#xff0c;非阻塞異步編程是他們引以為傲的地方。而在JDK8中&#xff0c;也引入了非阻塞異步編程的概念。所謂非阻塞異步編程&#xff0c;就是一種不需要等待返回結果的多線程的回調方法的封裝。使用非阻塞異步編程…

城市運行一網統管_【宣傳活動】持續開展城市運行“一網統管”建設宣傳活動...

為進一步推進本鎮城市運行“一網統管”建設工作&#xff0c;提高城市治理能力和治理水平&#xff0c;提升社會各界的知曉度和參與度&#xff0c;激發職能部門人員、黨員、群眾參與“一網統管”工作的熱情。9月10日&#xff0c;鎮網格中心于福泉居委會議室開展“推進城市運行‘一…

Java如何只使用位運算實現加減乘除

分享一波:程序員賺外快-必看的巔峰干貨 前言 接前面一篇博客&#xff0c;這又是某個公司的奇葩面試題&#xff08;都說了到底是哪家公司才會出這種沒營養的面試題&#xff09;。不過吐槽歸吐槽&#xff0c;這個題目還是有點學問的&#xff0c;比前面那個 不使用比較運算符如何…

Netweaver里某個software component和C4C的版本

有同事問如何通過代碼的方式獲得Netweaver里某個Software component的版本信息&#xff0c;以及Cloud for Customer&#xff08;C4C&#xff09;的版本信息。 Netweaver 點了Detail按鈕后&#xff1a; 這些版本信息存在表CVERS里&#xff1a; C4C C4C的版本號在Help->About …

pmc訂單表格_復工了,讀一則“如何提升訂單準交率和生產效率”的真實故事

故事發生在中國南方小鎮上一個做辦公家具的公司……家具公司創建于1995年&#xff0c;是一家集研發、生產、銷售、服務為一體的現代辦公家具、酒店家具制造企業。主要產品有實木班臺系列、會議臺系列、職員桌系列、屏風系列、沙發系列、辦公座椅、酒店家具系列。在省外還有兩個…

GET和POST請求到底有什么區別?

分享一波:程序員賺外快-必看的巔峰干貨 看到這個標題&#xff0c;想必大部分人都已經想關掉這篇博客了。先別急&#xff0c;你真的知道這兩個的區別嗎&#xff1f; 做過WEB開發的朋友可能很熟悉&#xff0c;看到這個問題能立馬脫口而出二者的區別。 GET在瀏覽器回退時是無害的…

有贊電商云應用框架設計

背景 有贊是 SaaS 公司&#xff0c;向商家提供了全方位的軟件服務&#xff0c;支撐商家進行采購、店鋪、商品、營銷、訂單、物流等等管理服務。 在這個軟件服務里&#xff0c;能夠滿足大部分的商家&#xff0c;為商家保駕護航。 但是很多大商家往往會有自己的特殊需求&#xff…

vivado 如何創建工程模式_基于Vivado的FPGA高性能開發研修班2019年8月30日上海舉行...

一、課程介紹&#xff1a;從7系列FPGA開始&#xff0c;Xilinx提出了Vivado Design Suite設計軟件&#xff0c;提供全新構建的SoC 增強型、以 IP 和系統為中心的下一代開發環境&#xff0c;以解決系統級集成和實現的生產力瓶頸。同時&#xff0c;Xilinx專門針對Vivado推出了Ultr…

程序員的自我修養——遠離“外包思維”

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 在我們做開發的日子里&#xff0c;不免會進行跳槽&#xff0c;跳來跳去公司無非就分成兩大類——互聯網公司、外包公司。當然我們本次討論的并…

英特爾為 Kubernetes 推出分布式深度學習平臺:Nauta

2019獨角獸企業重金招聘Python工程師標準>>> 隨著人工智能的發展&#xff0c;深度學習的價值不斷增長&#xff0c;但實現它可能是一個復雜耗時的過程。英特爾(Intel)正尋求通過其在 Kubernetes 進行分布式深度學習的新開源平臺來改變這一狀況&#xff0c;該深度學習…

pytorch梯度下降函數_Pytorch中常用的四種優化器SGD、Momentum、RMSProp、Adam

來源&#xff1a;AINLPer微信公眾號編輯: ShuYini校稿: ShuYini時間: 2019-8-16 引言很多人在使用pytorch的時候都會遇到優化器選擇的問題&#xff0c;今天就給大家介紹對比一下pytorch中常用的四種優化器。SGD、Momentum、RMSProp、Adam。隨機梯度下降法&#xff08;SGD&#…

2019/02/11-分布式數據庫概述

分布式數據庫類型&#xff08;1&#xff09;同構同質型&#xff1a;各場地都是同一種類型的數據庫&#xff0c;如都是關系型數據庫&#xff0c;且都是同一型號的數據庫管理系統&#xff08;2&#xff09;同構異質型&#xff1a;各場地是同一種類型的數據庫&#xff0c;但是數據…

python計算無窮級數求和常用公式_傅里葉變換(二) 從傅里葉級數到傅里葉變換...

在上一部分當中&#xff0c;得到了利用三角函數表示周期函數的方法&#xff0c;但是對于非周期函數就...涼了。所以有什么辦法嗎&#xff1f;沒辦法&#xff08;劃掉&#xff09;。這時候我們就需要拿出來我們的黑科技——傅里葉變換。一、傅里葉級數的推廣當然這東西肯定不是憑…

中鳴投籃機器人怎么組裝_1000余人參加洛陽市青少年機器人競賽

機器人智能識別地面上的黑色線條&#xff0c;并沿著線條來到指定位置&#xff0c;放下“快遞包裹”&#xff1b;無人機在空中飛舞&#xff0c;時而鉆過圓環&#xff0c;時而來個空翻&#xff0c;猶如跳芭蕾般在空中劃過一道優美曲線&#xff1b;橘紅色乒乓球從筒道中送出&#…

Exchange隊列優先級介紹和配置

一、場景 在日常辦公環境中所有郵件都會存在重要與非重要的情況&#xff0c;并且不同的郵箱的使用人的級別也不一樣&#xff0c;不一樣的職位級別要求不一樣的運維等級&#xff0c;以及發送郵件要求的速度也不一樣。這就導致了郵件需要按照重要性進行分類&#xff0c;重要的郵件…

Mybatis源碼閱讀(一):Mybatis初始化1.3 —— 解析sql片段和sql節點

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

IBM研究院計畫5年改變人類生活創新預測

IBM研究院近日發布未來5年將會改變人類生活方式的5項創新預測&#xff08;IBM 5 in 5&#xff09;&#xff0c;包含透過數字分身&#xff08;Digital Twin&#xff09;農業將用更少的資源供給不斷增長的人口、區塊鏈能防范更多的食物浪費、用微生物基因組群保護人類受到有害細菌…

添加請求頭 retrofit_RxJava 與 Retrofit 結合的最佳實踐

前言RxJava和Retrofit也火了一段時間了&#xff0c;不過最近一直在學習ReactNative和Node相關的姿勢&#xff0c;一直沒有時間研究這些新東西&#xff0c;最近有個項目準備寫&#xff0c;打算先用Android寫一個Demo出來&#xff0c;卻發現Android的世界發生了天翻地覆的變化&am…

Mybatis源碼閱讀(二):動態節點解析2.1 —— SqlSource和SqlNode

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

k8s邊緣節點_邊緣計算,如何啃下集群管理這塊硬骨頭?

導讀邊緣計算平臺&#xff0c;旨在將邊緣端靠近數據源的計算單元納入到中心云&#xff0c;實現集中管理&#xff0c;將云服務部署其上&#xff0c;及時響應終端請求。然而&#xff0c;成千上萬的邊緣節點散布于各地&#xff0c;例如銀行網點、車載節點等&#xff0c;節點數量甚…