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了,但是執...