poi匯出word模板

2021-10-23 01:36:35 字數 3304 閱讀 6266

**poi匯出word模板段落處理

流程:1:讀取文件:` //獲取docx解析物件

xwpfdocument document =

newxwpfdocument

(poixmldocument.

openpackage

(inputurl)

);

在xwpfdocument物件裡有兩個常用的方法,乙個是getparagraphs(),得到段落集合;

list

paragraphs = document.

getparagraphs()

;

還有乙個gettables();,得到**集合:

list

tables = document.

gettables()

;

所以很顯然,我們需要判斷獲得的是段落還是**,如果是段落,按段落的方式處理,如果是**,就按照**的方式處理;

這裡我先不寫判斷的**,因為後面會在處理中判斷,我們先把對應的模組寫好,然後在處理中呼叫即可,即**的元件化開發;

這一章我只介紹一下段落的處理問題;

//遍歷段落集合

xwpfparagraph paragraph = paragraphs.

get(i)

;// 有的段落裡的run是空,所以這裡不能判空

list

runs = paragraph.

getruns()

;for

(int j =

0; j < runs.

size()

; j++

)public

void

setfontsize

(int size)

public

void

settext

(string value,

int pos)

else

}public string getfontfamily()

public

void

setfontfamily

(string fontfamily)

原始碼中我們可以看到,它可以處理文字的各種資訊;我只是分段擷取了部分,因為這裡用的到;如果感興趣的話,你可以自己去看一下**,裡面還有很多我看不懂的方法和屬性;

其實到這裡基本就可以處理段落的內容了,但是我還是必須要說清楚,俗話說送佛送到西,這裡繼續往下走;

我們應該會有這樣的疑問,那就是模板中有的地方是插入,有的地方是替換。插入就不用多說了,找到指定的位置插入或寫入即可;替換是叫含有${}這個符號替換成指定內容;

插入的話我們直接通過xwpfrun這個方法就好了,從上面的原始碼中我們看到了這個方法:

public

void

settext

(string value,

int pos)

else

}

run.settext(text,0);就插入了,

替換也是用這個方法;

那麼我為什麼要把它們區別開了,因為在處理中我們需要進行判斷,所以這裡建議兩種處理放在兩個方法中,然後在具體中被呼叫;

最後我再補充一下頁面中替換的如果有,那麼我們就要區分出插入的是或者文字了;

一開始我是將要替換的資訊全部放在乙個map集合裡,然後判斷key值來插入,這種方法不是不行,只是每次處理查詢的資料太多,效率低。我個人建議文字放在乙個集合,放乙個集合

,然後佔位符裡pic_開頭就是,p_就是文字;

然後run.gettxet()得到text,再通過string中的contains方法判斷即可;

新增有兩種方法;

一種比較簡單:我先貼上xwpfrun中的另一段原始碼:

public xwpfpicture addpicture

(inputstream picturedata,

int picturetype, string filename,

int width,

int height)

throws invalidformatexception, ioexception

catch

(xmlexception var30)

}

//    建立的方法

private

static

void

createpicture

(int id, string blipid,

int width,

int height, xwpfrun xwpfrun)

catch

(xmlexception xe)

inline.

set(xmltoken)

; inline.

setdistt(0

);inline.

setdistb(0

);inline.

setdistl(0

);inline.

setdistr(0

);ctpositivesize2d extent = inline.

addnewextent()

; extent.

setcx

(width)

; extent.

setcy

(height)

; ctnonvisualdrawingprops docpr = inline.

addnewdocpr()

; docpr.

setid

(id)

; docpr.

setname

("docx_img_ "

+ id)

; docpr.

setdescr

("docx picture");

}

//    替換《**》

private

static

void

updatepicture

(xwpfdocument document, xwpfrun run, string text, map

picmap, string key)

catch

(exception e)

}

這就是第二種方法,你們自己斟酌,按喜好而定;

Springboot 之 POI匯出Word檔案

匯出word檔案其實與springboot沒有多大關係,這都是apache子專案poi的功勞。下面簡單介紹一下在springboot專案中如何使用poi匯出word檔案。org.springframework.boot spring boot starter parent 1.4.0.release...

POI匯入匯出Excel模板

hssfworkbook 是操作excel2003以前 包括2003 的版本,副檔名是.xls xssfworkbook 是操作excel2007的版本,副檔名是.xlsx 以xssfworkbook為例 匯出 public void getexcelbyboiler catch filenotfo...

POI 匯出word時不能換行解決

今天遇到這個問題,鬱悶了很久,還好終於解決了,在此給大家分享下經驗!其它的就不說了,上 思路 將需要換行的地方斷開,分別生成段,這樣就ok了 public void buildword string title,string content,string exportpath system.out....