C#+NPOI動態庫 對Word的簡單編輯
眾裡尋他千百度,終回首,就在燈火闌珊處。
在很多人部落格上看見基於NPOI動態庫對word進行讀寫,但是沒有自己想要的效果(很多部落格都是對word中的表格做操作,這很正常,NPOI的官方使用文件從頭到尾的都是在講對Excel的操作),於是乎自己摸索了一個。在這裡覺得最最最重要的東西,不是寫出來了,而是要學會去檢視相關動態庫的介紹、使用、開發文件,還有就是要學會用VS的物件瀏覽器,在這裡可以找到自己想要的東西。比如在下面將要介紹的方法:
public void ReplaceText(string oldText, string newText);
通過物件瀏覽器看和
1.首先的準備一個word模版,我的模版如圖,這是一個國家兩區規劃的公示公告的檔案模版(出於專案需要):
其中{$village} 為將要被替換掉的內容,是在程式讀寫中對word的中內容替換的關鍵字。
程式如下:
public struct PublicationInfor
{
public string village;
public
public string area;
public string deadLine;
public string publicationTime;
}
class NPOIWriteToWord
{
///<summary>
/// 測試村實測結果公示公告
/// </summary>
public static void WriteToPublicationOfResult()
{
FileStream fs = new FileStream(@"測試村實測結果公示公告.docx", FileMode.Open, FileAccess.Read);
NPOI.XWPF.UserModel.XWPFDocument myDocx = new NPOI.XWPF.UserModel.XWPFDocument(fs);//開啟07(.docx)以上的版本的文件
PublicationInfor plcInfor = new PublicationInfor
{
village = "窩窩鄉",
fullSite = "神聖獸國遊尾郡窩窩鄉",
area = "70.60",
deadLine = "2018年12月12日",
publicationTime = "2018年11月12日"
};
//遍歷word中的段落
foreach (var para in myDocx.Paragraphs)
{
string oldtext = para.ParagraphText;
if (oldtext == "")
continue;
string temptext = para.ParagraphText;
//以下為替換文件模版中的關鍵字
if (temptext.Contains("{$village}"))
temptext = temptext.Replace("{$village}", plcInfor.village);
if (temptext.Contains("{$fullSite}"))
temptext = temptext.Replace("{$fullSite}", plcInfor.fullSite);
if (temptext.Contains("{$area}"))
temptext = temptext.Replace("{$area}", plcInfor.area);
if (temptext.Contains("{$deadLine}"))
temptext = temptext.Replace("{$deadLine}", plcInfor.deadLine);
if (temptext.Contains("{$publicationTime}"))
temptext = temptext.Replace("{$publicationTime}", plcInfor.publicationTime);
para.ReplaceText(oldtext, temptext);
}
FileStream output = new FileStream(@"測試村實測結果公示公告.docx", FileMode.Create);
myDocx.Write(output);
fs.Close();
fs.Dispose();
output.Close();
output.Dispose();
}
}
呼叫此方法後的執行結果: