最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你如何用Java替換Word中帶有${}的內(nèi)容

 更新時間:2021年04月19日 08:51:34   作者:程序員的微笑  
這篇文章主要介紹了教你如何用Java替換Word中帶有${}的內(nèi)容,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下

一、概述

1、因為有些需求,需要把word文檔里面的特定數(shù)據(jù),設置成可變的;所以需要某種方式,把可變量用標簽(如${變量名})替換,通過后端賦值此變量名,重新生成的Word就能根據(jù)后端設置的內(nèi)容變化。

2、替換方法:準備一份word模板文檔,如:word_mode.doc(或 word_mode.docx) 文件,把可變內(nèi)容,用標簽${變量名}替換(如圖1姓名:${name})

3、轉(zhuǎn)成可讀模板:全部設置完變量標簽后,對此word文檔進行另存為xml格式的文檔(圖2),保存后的文件名:word_mode.xml(即用戶信息.xml)。再通過修改后綴名,最終生成模板(用于替換標簽的):word_mode.ftl

4、word_mode.ftl文件中,生成的標簽名可能被樣式隔開,需要手工處理下,如圖3(處理前),圖4(處理后)

 

5、對于生成的ftl文件,使用Notepad++進行xml格式化下,有利于處理EL表達式標簽分開的問題。如果有圖片的話,格式化后,無法正常顯示,可以看看圖片的BASE64碼最后面與標簽是否隔開,如果是可去掉空格。

如果還不行的話,找格式化之前的BASE64內(nèi)容替換格式化后的圖片BASE64的內(nèi)容,這應該就沒有問題。

 

二、處理含List的內(nèi)容

2.1概述

有多個用戶信息,需要顯示出來,如圖所示,word文檔處理可變內(nèi)容。

2.2處理方式

因為第一行是字段說明不可變,第二行是可變參數(shù),根據(jù)List的多少而改變的,可在word_mode.ftl中添加<#list></#list>標簽,如圖5(開頭),圖6(結(jié)尾)

 

三、程序處理

3.1引入pom.xml

<!-- 導出word文檔 -->
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>2.3.23</version>
</dependency>

3.2實體bean:UserBean

public class UserBean {
	private String username;
	private String userAge;
	private String userHigh;
	private String userSex;
	
	public UserBean(String username, String userAge, String userHigh, String userSex) {
		this.username = username;
		this.userAge = userAge;
		this.userHigh = userHigh;
		this.userSex = userSex;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getUserAge() {
		return userAge;
	}
	public void setUserAge(String userAge) {
		this.userAge = userAge;
	}
	public String getUserHigh() {
		return userHigh;
	}
	public void setUserHigh(String userHigh) {
		this.userHigh = userHigh;
	}
	public String getUserSex() {
		return userSex;
	}
	public void setUserSex(String userSex) {
		this.userSex = userSex;
	}
}

3.3替換工具類:WordUtils

package com.jtr.hutool.main;
 
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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.jtr.hutool.bean.UserBean;
 
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;
 
public class WordUtils {
	/** 設置使用的編碼格式 */
	private static final String CHARSET = "UTF-8";
	/** 設置使用的版本 */
	private static final String VERSION = "2.3.0";
	
	public static void main(String[] args) {
		downloadWord("C:\\Users\\Think\\Desktop\\temp\\", "word_mode.ftl");
	}
	
	public static void downloadWord(String wordModePath, String wordModeFile) {
		try {
			// 1. 獲取替換參數(shù)
			Map<String, Object> wordData = initWordMap();
			
			// 2. 設置配置內(nèi)容
			// 設置版本
			Configuration configuration = new Configuration(new Version(VERSION));
			// 指定加載Word模板的路徑
			configuration.setDirectoryForTemplateLoading(new File(wordModePath));
			// 以UTF-8的編碼格式,讀取模板文檔
			Template template = configuration.getTemplate(wordModeFile, CHARSET);
			
			// 3. 輸出文檔路徑及名稱
			File outFile = new File(wordModePath + wordData.get("username") + "_員工信息.doc");
			Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), CHARSET), 10240);
			// 輸出
			template.process(wordData, writer);
			writer.flush();
			writer.close();
			System.out.println("員工信息導出已完成");
			
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
	private static Map<String, Object> initWordMap() {
		List<UserBean> userList = new ArrayList<UserBean>();
		userList.add(new UserBean("用戶1", "10", "171", "男"));
		userList.add(new UserBean("用戶2", "20", "172", "女"));
		userList.add(new UserBean("用戶3", "30", "173", "男"));
		userList.add(new UserBean("用戶4", "40", "174", "女"));
		userList.add(new UserBean("用戶3", "50", "175", "男"));
		
		Map<String, Object> wordData = new HashMap<String, Object>();
		wordData.put("name", "作者1");
		wordData.put("age", "60");
		wordData.put("high", "177");
		wordData.put("userList", userList);
		
		return wordData;
	}

到此這篇關于教你如何用Java替換Word中帶有${}的內(nèi)容的文章就介紹到這了,更多相關java替換Word中帶有${}的內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 帶你了解mybatis如何實現(xiàn)讀寫分離

    帶你了解mybatis如何實現(xiàn)讀寫分離

    本篇文章主要介紹了MyBatis實現(xiàn)數(shù)據(jù)讀寫分離的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-08-08
  • 徹底搞懂Java多線程(五)

    徹底搞懂Java多線程(五)

    這篇文章主要給大家介紹了關于Java面試題之多線程和高并發(fā)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-07-07
  • 深入理解java自旋鎖

    深入理解java自旋鎖

    這篇文章主要介紹了如何深入理解java自旋鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面和小編來一起學習下吧
    2019-05-05
  • 使用Thrift實現(xiàn)跨語言RPC的調(diào)用

    使用Thrift實現(xiàn)跨語言RPC的調(diào)用

    Thrift最大的優(yōu)勢就是可以實現(xiàn)跨語言RPC調(diào)用,尤其在一些大廠,微服務各模塊之間使用不同的語言是很常見的,本文就將使用java作為服務端,用python作為客戶端,實現(xiàn)不同語言之間的RPC調(diào)用,需要的可以參考下
    2023-10-10
  • 分享幾個寫簡潔java代碼的小技巧

    分享幾個寫簡潔java代碼的小技巧

    成為一個優(yōu)秀的Java程序員,有著良好的代碼編寫習慣是必不可少的,下面這篇文章主要給大家介紹了關于寫java代碼的小技巧,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • 帶大家認識Java語法之泛型與通配符

    帶大家認識Java語法之泛型與通配符

    使用泛型的目的是利用Java編譯機制,在編譯過程中幫我們檢測代碼中不規(guī)范的有可能導致程序錯誤的代碼,下面這篇文章主要給大家介紹了關于Java泛型與通配符的相關資料,需要的朋友可以參考下
    2022-03-03
  • Java根據(jù)正整數(shù)的位數(shù)并逆序打印出各位數(shù)字

    Java根據(jù)正整數(shù)的位數(shù)并逆序打印出各位數(shù)字

    給一個不多于5位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字,需要的朋友可以參考下
    2017-02-02
  • hadoop?切片機制分析與應用

    hadoop?切片機制分析與應用

    切片這個詞對于做過python開發(fā)的同學一定不陌生,但是與hadoop中的切片有所區(qū)別,hadoop中的切片是為了優(yōu)化hadoop的job在處理過程中MapTask階段的性能達到最優(yōu)而言
    2022-02-02
  • 深入探究一下Java中不同的線程間數(shù)據(jù)通信方式

    深入探究一下Java中不同的線程間數(shù)據(jù)通信方式

    這篇文章主要來和大家一起深入探究一下Java中不同的線程間數(shù)據(jù)通信方式,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-04-04
  • Spring Boot集成Spring Cloud Eureka進行服務治理的方法

    Spring Boot集成Spring Cloud Eureka進行服務治理的方法

    本文通過詳細的步驟和代碼示例,介紹了如何在Spring Boot中集成Spring Cloud Eureka進行服務治理,通過這種方式,可以有效地管理和維護微服務架構(gòu)中的服務,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評論

永平县| 永吉县| 奉贤区| 岚皋县| 遵化市| 旌德县| 永春县| 高淳县| 府谷县| 平乐县| 炎陵县| 原阳县| 汪清县| 盈江县| 彭泽县| 四平市| 荣昌县| 贵南县| 如东县| 德阳市| 吕梁市| 南京市| 沙坪坝区| 莎车县| 保靖县| 囊谦县| 宝丰县| 安康市| 永福县| 仁化县| 佛坪县| 大兴区| 扶余县| 镇远县| 安宁市| 会泽县| 肇东市| 塔河县| 黄陵县| 姜堰市| 延吉市|