Java使用poi-tl生成word模板-動(dòng)態(tài)數(shù)據(jù)列表
第一步,添加poi-tl的依賴
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</version>
</dependency>
第二步,準(zhǔn)備word模板文件
????????????模板中文本信息可以用 ? ?{{ ?}} ? 標(biāo)簽指定
?? ?????????例如在word文檔中寫入:{{var}} //會將word文檔中的對位置的標(biāo)簽替換為map中的數(shù)據(jù)
?? ?????????模板文件為word文檔,格式為docx
? ? ? ? ? ? ?模板圖
? ? ? ? ? ? ??
第三步,寫java代碼
package com.poi;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.plugin.table.HackLoopTableRenderPolicy;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test3 {
public static void main(String[] args) throws IOException {
//1.在java中創(chuàng)建一個(gè)保存數(shù)據(jù)的map,key為對應(yīng)word文本中的標(biāo)簽,值為要替換的數(shù)據(jù),會將map中的對應(yīng)的key替換為value
Map<String, Object> datas = new HashMap<String, Object>();
//2.給map添加要替換的數(shù)據(jù)
//(1)簡單的數(shù)據(jù),替換的文本數(shù)據(jù)
datas.put("var","數(shù)據(jù)內(nèi)容");//可直接添加到map中
//(2)動(dòng)態(tài)的表格列表數(shù)據(jù),要?jiǎng)?chuàng)建List集合,數(shù)據(jù)類型為map類型,map中的key為word中要遍歷的列,值為要替換的內(nèi)容
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();//創(chuàng)建map的List集合
for (int i = 0; i < 6; i++) { //用循環(huán)添加每行的數(shù)據(jù),添加6行數(shù)據(jù)
Map<String,Object> detailMap = new HashMap<String, Object>();//將word中標(biāo)簽名的例和對應(yīng)數(shù)據(jù)保存到map
detailMap.put("index", i+1);//序號
detailMap.put("title", "商品"+i);//商品名稱
detailMap.put("product_description", "套");//商品規(guī)格
detailMap.put("buy_num", 3+i);//銷售數(shù)量
detailMap.put("saleprice", 100+i);//銷售價(jià)格
list.add(detailMap);//將設(shè)置好的行保存到list集合中
}
HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();//創(chuàng)建一個(gè)列表的規(guī)則
Configure config = Configure.newBuilder().bind("list", policy).build();//設(shè)置列表配置,如果有多個(gè)列表時(shí)需加.bind("list1", policy) 新列表配置即可
datas.put("list", list); //將列表保存到渲染的map中
//3.創(chuàng)建XWPFTemplate對象,并設(shè)置讀取模板路徑和要渲染的數(shù)據(jù)
XWPFTemplate template = XWPFTemplate.compile("D:/template/001.docx",config).render(datas);
//compile(模板路徑,對應(yīng)的配置)方法是設(shè)置模板路徑和模板配置的,如果不設(shè)置配置時(shí)可不傳config
//render(datas)方法是用來渲染數(shù)據(jù),將準(zhǔn)備好的map數(shù)據(jù)方進(jìn)去渲染
//4.模板的輸出,用FileOutputStream輸出流(可以輸出到指定文件位置,也可以用ajax直接返回給瀏覽器下載)
FileOutputStream out = new FileOutputStream("D:/out/1.docx");//創(chuàng)建文件輸出流并指定位置
template.write(out); //用XWPFTemplate對象的寫write()方法將流寫入
}
}
導(dǎo)出后的文件圖
? ? ? ? ? ? ? ? ?文章來源:http://www.zghlxwxcb.cn/news/detail-620821.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-620821.html
到了這里,關(guān)于Java使用poi-tl生成word模板-動(dòng)態(tài)數(shù)據(jù)列表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!