1. 程式人生 > >C#+NPOI動態庫 對Word的簡單編輯

C#+NPOI動態庫 對Word的簡單編輯

眾裡尋他千百度,終回首,就在燈火闌珊處。

在很多人部落格上看見基於NPOI動態庫對word進行讀寫,但是沒有自己想要的效果(很多部落格都是對word中的表格做操作,這很正常,NPOI的官方使用文件從頭到尾的都是在講對Excel的操作),於是乎自己摸索了一個。在這裡覺得最最最重要的東西,不是寫出來了,而是要學會去檢視相關動態庫的介紹、使用、開發文件,還有就是要學會用VS的物件瀏覽器,在這裡可以找到自己想要的東西。比如在下面將要介紹的方法:

public void ReplaceText(string oldText, string newText);

通過物件瀏覽器看

檢視NPOI的相關元件找到了自己想要的方法,下面上程式碼。

1.首先的準備一個word模版,我的模版如圖,這是一個國家兩區規劃的公示公告的檔案模版(出於專案需要):

其中{$village} 為將要被替換掉的內容,是在程式讀寫中對word的中內容替換的關鍵字。

程式如下:

public struct PublicationInfor

{

        public string village;

        public

string fullSite;

        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();

        }

}

 

呼叫此方法後的執行結果: