這篇文章主要介紹了C#使用NPOI生成Word文檔的方法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)公司是專業(yè)的巧家網(wǎng)站建設(shè)公司,巧家接單;提供網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行巧家網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
VS2017、右鍵解決方案,管理NuGet程序包,搜索并為項(xiàng)目安裝NPOI程序包,并引用:
using NPOI.XWPF.UserModel;
本編使用NPOI版本為2.3.0
下面進(jìn)入正題··
一、 獲取模板(XWPFDocument doc)
使用模板,首先獲取模板,然后把獲取的模板實(shí)例化為NPOI的文檔對(duì)象進(jìn)行編輯操作:
using (FileStream stream = File.OpenRead(“模板文件地址”)){
XWPFDocument doc = new XWPFDocument(stream);
//處理doc,代碼控制編輯文檔。
}
處理doc后,生成新的文件,寫入doc ,生成word完成。
FileStream file = new FileStream(生成文件路徑+文件名, FileMode.Create, FileAccess.Write);
doc.Write(file);
file.Close();
doc就是我們獲取到的模板的所有內(nèi)容。
還有一點(diǎn)本編使用模板均為docx后綴文件,doc修改docx讀取報(bào)錯(cuò),需要另存為doxc文檔。
二、 文本處理(XWPFParagraph para)
doc.Paragraphs 獲取到文檔里的所有的段落對(duì)象;
para.ParagraphText 獲取段落的文本數(shù)據(jù);
para.ReplaceText(要被替換的文本,替換文本) 替換段落的文本(模板能實(shí)現(xiàn)的關(guān)鍵)
XWPFParagraph的官方參考文檔
三、 表格處理(XWPFTable table)
doc.Tables 獲取文檔里的所有的表格對(duì)象;
這里有必要多一嘴,doc.Tables獲取的只是Word中最外層的表格,不包含嵌套內(nèi)層的。
獲取嵌套單元格可使用cell.Tables;
(一) 表格行處理(XWPFTableRow row)
row.Rows 獲取表格所有行;
(二) 表格單元格處理(XWPFTableCell cell)row.GetTableICells() ;
獲取表格行的所有單元格;
獲取到單元格之后就可以獲取單元格里的文本段落(Paragraphs)并且進(jìn)行文本替換
(三) 水平合并行單元格
CT_Tc cttcofRowThird = cell.GetCTTc(); CT_TcPr ctProfRowThird = cttcofRowThird.AddNewTcPr(); ctProfRowThird.gridSpan = new CT_DecimalNumber(); ctProfRowThird.gridSpan.val = num.ToString();//合并num列
(四) 垂直合并列單元格
List<XWPFTableRow> rows所有要合并的行的XWPFTableRow對(duì)象集合。 XWPFTableCell cellFirstofThird = 第一行要合并的單元格對(duì)象; CT_Tc cttcFirstofThird = cellFirstofThird.GetCTTc(); CT_TcPr ctPrFirstofThird = cttcFirstofThird.AddNewTcPr(); ctPrFirstofThird.AddNewVMerge().val = ST_Merge.restart;//開(kāi)始合并行 ctPrFirstofThird.AddNewVAlign().val = ST_VerticalJc.center;//垂直 cttcFirstofThird.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center; for (int i = 1; i < rows.Count; i++) { XWPFTableCell cellfirstofRow = 第i行要合并的單元格對(duì)象; CT_Tc cttcfirstofRow = cellfirstofRow.GetCTTc(); CT_TcPr ctPrfirstofRow = cttcfirstofRow.AddNewTcPr(); ctPrfirstofRow.AddNewVMerge().val = ST_Merge.@continue;//繼續(xù)合并行 ctPrfirstofRow.AddNewVAlign().val = ST_VerticalJc.center;//垂直 }
四、 圖片處理
2.3.0版本的NPOI的圖片插入沒(méi)有集成xml文件的修改所以需要手寫代碼編入(當(dāng)然,我是拷過(guò)來(lái)的)。
using (FileStream fsImg = new FileStream(圖片路徑, FileMode.Open, FileAccess.Read, FileShare.None)) { var picID = doc.AddPictureData(fsImg, (int)NPOI.XWPF.UserModel.PictureType.JPEG); string picXml = "" + " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + "0" + "\" name=\"Generated\"/>" + " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>" + " <a:blip r:embed=\"" + id + "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>" + " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>" + " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>" + " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\"" + height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">" + " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>" + " </pic:pic>"; XWPFParagraph par = cell.AddParagraph();//創(chuàng)建段落對(duì)象(可以在doc加也可在cell加) par.Alignment = ParagraphAlignment.CENTER;//居中 XWPFRun run = par.CreateRun(); CT_Inline inline = run.GetCTR().AddNewDrawing().AddNewInline(); inline.graphic = new CT_GraphicalObject { graphicData = new CT_GraphicalObjectData { uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" } }; try { inline.graphic.graphicData.AddPicElement(picXml); } catch (XmlException xe) { throw xe; } NPOI.OpenXmlFormats.Dml.WordProcessing.CT_PositiveSize2D extent = inline.AddNewExtent(); extent.cx = width; extent.cy = height; NPOI.OpenXmlFormats.Dml.WordProcessing.CT_NonVisualDrawingProps docPr = inline.AddNewDocPr(); docPr.id = 1; docPr.name = "Image" + id; }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C#使用NPOI生成Word文檔的方法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
當(dāng)前名稱:C#使用NPOI生成Word文檔的方法
文章分享:http://muchs.cn/article28/igeocp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化、企業(yè)網(wǎng)站制作、ChatGPT、云服務(wù)器、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)