C# 使用NPOI產生Word文件(依照範本)
專案需要整合word匯出,做的時候網路文件資源不是很多,也比較雜亂,所以查了查,整理了整理,做個記錄,也順便把NPOI操作Word文件的一些基本操作分享給有需要的朋友。
本篇包含產生Word對word文字的操作,表格的操作,以及圖片的操作,都為產生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 文字處理(XWPFParagraph para)
doc.Paragraphs 取得到文件裡的所有的段落物件;
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文件(依照範本)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用 C# 的 Active Directory 指南。在這裡,我們討論 Active Directory 在 C# 中的介紹和工作原理以及語法和範例。

多線程和異步的區別在於,多線程同時執行多個線程,而異步在不阻塞當前線程的情況下執行操作。多線程用於計算密集型任務,而異步用於用戶交互操作。多線程的優勢是提高計算性能,異步的優勢是不阻塞 UI 線程。選擇多線程還是異步取決於任務性質:計算密集型任務使用多線程,與外部資源交互且需要保持 UI 響應的任務使用異步。

C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發明,旨在將面向對象編程引入C語言,其演變歷程包括多次標準化,如C 11引入auto關鍵字和lambda表達式,C 20引入概念和協程,未來將專注於性能和系統級編程。 2.C#由微軟在2000年發布,結合C 和Java的優點,其演變注重簡潔性和生產力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發者的生產力和雲計算。
