這篇文章主要介紹了C#使用NPOI生成Word文檔的方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

VS2017、右鍵解決方案,管理NuGet程序包,搜索并為項目安裝NPOI程序包,并引用:
using NPOI.XWPF.UserModel;
本編使用NPOI版本為2.3.0
下面進入正題··
一、 獲取模板(XWPFDocument doc)
使用模板,首先獲取模板,然后把獲取的模板實例化為NPOI的文檔對象進行編輯操作:
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就是我們獲取到的模板的所有內容。
還有一點本編使用模板均為docx后綴文件,doc修改docx讀取報錯,需要另存為doxc文檔。
二、 文本處理(XWPFParagraph para)
doc.Paragraphs 獲取到文檔里的所有的段落對象;
para.ParagraphText 獲取段落的文本數據;
para.ReplaceText(要被替換的文本,替換文本) 替換段落的文本(模板能實現的關鍵)
XWPFParagraph的官方參考文檔
三、 表格處理(XWPFTable table)
doc.Tables 獲取文檔里的所有的表格對象;
這里有必要多一嘴,doc.Tables獲取的只是Word中最外層的表格,不包含嵌套內層的。
獲取嵌套單元格可使用cell.Tables;
(一) 表格行處理(XWPFTableRow row)
row.Rows 獲取表格所有行;
(二) 表格單元格處理(XWPFTableCell cell)row.GetTableICells() ;獲取表格行的所有單元格;
獲取到單元格之后就可以獲取單元格里的文本段落(Paragraphs)并且進行文本替換
(三) 水平合并行單元格
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對象集合。
XWPFTableCell cellFirstofThird = 第一行要合并的單元格對象;
CT_Tc cttcFirstofThird = cellFirstofThird.GetCTTc();
CT_TcPr ctPrFirstofThird = cttcFirstofThird.AddNewTcPr();
ctPrFirstofThird.AddNewVMerge().val = ST_Merge.restart;//開始合并行
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行要合并的單元格對象;
CT_Tc cttcfirstofRow = cellfirstofRow.GetCTTc();
CT_TcPr ctPrfirstofRow = cttcfirstofRow.AddNewTcPr();
ctPrfirstofRow.AddNewVMerge().val = ST_Merge.@continue;//繼續合并行
ctPrfirstofRow.AddNewVAlign().val = ST_VerticalJc.center;//垂直
}四、 圖片處理
2.3.0版本的NPOI的圖片插入沒有集成xml文件的修改所以需要手寫代碼編入(當然,我是拷過來的)。
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();//創建段落對象(可以在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;
}感謝你能夠認真閱讀完這篇文章,希望小編分享的“C#使用NPOI生成Word文檔的方法”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯成都網站設計公司,關注創新互聯成都網站設計公司行業資訊頻道,更多相關知識等著你來學習!
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、網站設計器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前標題:C#使用NPOI生成Word文檔的方法-創新互聯
當前鏈接:http://www.yijiale78.com/article6/cegdig.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、網站營銷、網站內鏈、ChatGPT、電子商務、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯