POI 3 9根據word模板生成報表

2021-10-08 17:50:51 字數 3261 閱讀 8706

xwpfdocument物件

poi是apache提供的可以操作word文件的第三方jar。poi能操作word是使用xwpfdocument物件。

xwpfdocument物件可以解析docx檔案,在xwpfdocument物件通過輸入流解析docx的時候,會獲取到docx文件中的各種物件,例如**,段落,等,通過操作xwpfdocument物件就可以修改模板內容

xwpfdocument api結構org.apache.poi.xwpf.usermodel.xwpfdocument

xwpfdocument 提供write(outputstream stream)方法將修改後的物件重新寫入xml並生成新的docx

通過xwpfdocument 可以獲得的docx中的各種物件

本文主要是往**插入資料以及替換表頭

工具類

public

class

wordertonewwordutils

catch

(ioexception e)

return changeflag;

}/**

* 根據模板生成新word文件

* @param inputurl 模板存放位址

* @param textmap 需要替換的資訊集合

* @return 成功返回true,失敗返回false

*/public

static

boolean

changword1

(string inputurl, string outputurl,

maptextmap)

catch

(ioexception e)

return changeflag;

}/**

* 替換段落文字

* @param document docx解析物件

* @param textmap 需要替換的資訊集合

*/public

static

void

changetext

(xwpfdocument document, map

textmap)".

equals

(run.

tostring()

)) run.

setfontsize(20

);//替換模板原來位置

run.

settext

(changevalue

(run.

tostring()

, textmap),0

);}}

}}/** * 替換**物件方法

* @param document docx解析物件

* @param textmap 需要替換的資訊集合

* @param tablelist 需要插入的**資訊集合

*/public

static

void

changetable

(xwpfdocument document, map

textmap,

list

]> tablelist)

else}}

}/**

* 遍歷**

* @param rows **行物件

* @param textmap 需要替換的資訊集合

*/public

static

void

eachtable

(list

rows ,map

textmap)}}

}}}/**

* 為**插入資料,行數不夠新增新行

* @param table 需要插入資料的**

* @param tablelist 插入資料集合

*/public

static

void

inserttable

(xwpftable table, list

]> tablelist)

//遍歷**插入資料

list

rows = table.

getrows()

;for

(int i =

1; i < rows.

size()

; i++)}

}/**

* 判斷文字中時候包含$

* @param text 文字

* @return 包含返回true,不包含返回false

*/public

static

boolean

checktext

(string text)

return check;

}/**

* 匹配傳入資訊集合與模板

* @param value 模板需要替換的區域

* @param textmap 傳入資訊集合

* @return 模板需要替換區域資訊集合對應值

*/public

static string changevalue

(string value, map

textmap)

string key =

"$";

if(value.

indexof

(key)!=-

1)}//模板未匹配到區域替換為空if(

checktext

(value)

)return value;

}}

測試

public

static

void

main

(string[

] args));

testlist.

add(

newstring

);testlist.

add(

newstring

);testlist.

add(

newstring

);wordertonewwordutils.

changword

(inputurl, outputurl, testmap,testlist)

;}

模板word

生成的word

根據模板生成word

var product list product list賦值 var filename 文件模板.docx var filernd upload temp session.sessionid.tostring parseint math.random 1000000 docx var fso ne...

Java根據word模板生成word文件之總結

至此word生成就完事了,我寫的有點粗,但是應該能看到的懂,沒有經過重構,很亂,而且方法體應該還需要調整,但是不影響我們的功能實現。通過這一整套流程,其實完全可以做成乙個元件式的東西,我現在沒有時間去考慮他,大家有時間好好考慮一下,完全做到可配置話的,我現在能做到單個標籤,的定義即可配置化,但是如果...

A1138 根據前序 中序生成後序

參考了部落格上碼量不到50行的 完成了這題的ac重構。感覺真的基礎很重要,這題其實是很簡單的一道樹的前中後序的題目。但是我之前練習的時候,都是用的自己總結的騷套路,雖然理解起來很直觀,但是用了動態陣列 vector 時間複雜度比較大。這題問題規模n 5e4,時間控制600ms,雖然已經ac了,但是執...