国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) 后端開(kāi)發(fā) C#.Net教程 C# 使用NPOI生成Word文檔(按照模板)

C# 使用NPOI生成Word文檔(按照模板)

Aug 07, 2018 am 10:52 AM
c#

項(xiàng)目需要集成word導(dǎo)出,做的時(shí)候網(wǎng)上文檔資源不是很多,也比較雜亂,所以查了查,整理了整理,做個(gè)記錄,也順便把NPOI操作Word文檔的一些基本操作分享給有需要的朋友。 ?

本篇包括生成Word對(duì)word文本的操作,表格的操作,以及圖片的操作,都為生成word基礎(chǔ)的一些操作。

以下只是我的個(gè)人理解所得,大家有什么更好的想法歡迎補(bǔ)充。

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后,生成新的文件,寫(xiě)入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文件的修改所以需要手寫(xiě)代碼編入(當(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;
}

今天先到這了,以后有收獲再補(bǔ)充。

相關(guān)推薦:

使用C/C 編寫(xiě)PHP Extension

【c#教程】C# 數(shù)據(jù)類(lèi)型

以上是C# 使用NPOI生成Word文檔(按照模板)的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

c#多線程和異步的區(qū)別 c#多線程和異步的區(qū)別 Apr 03, 2025 pm 02:57 PM

多線程和異步的區(qū)別在于,多線程同時(shí)執(zhí)行多個(gè)線程,而異步在不阻塞當(dāng)前線程的情況下執(zhí)行操作。多線程用于計(jì)算密集型任務(wù),而異步用于用戶交互操作。多線程的優(yōu)勢(shì)是提高計(jì)算性能,異步的優(yōu)勢(shì)是不阻塞 UI 線程。選擇多線程還是異步取決于任務(wù)性質(zhì):計(jì)算密集型任務(wù)使用多線程,與外部資源交互且需要保持 UI 響應(yīng)的任務(wù)使用異步。

C#與C:歷史,進(jìn)化和未來(lái)前景 C#與C:歷史,進(jìn)化和未來(lái)前景 Apr 19, 2025 am 12:07 AM

C#和C 的歷史與演變各有特色,未來(lái)前景也不同。1.C 由BjarneStroustrup在1983年發(fā)明,旨在將面向?qū)ο缶幊桃隒語(yǔ)言,其演變歷程包括多次標(biāo)準(zhǔn)化,如C 11引入auto關(guān)鍵字和lambda表達(dá)式,C 20引入概念和協(xié)程,未來(lái)將專(zhuān)注于性能和系統(tǒng)級(jí)編程。2.C#由微軟在2000年發(fā)布,結(jié)合C 和Java的優(yōu)點(diǎn),其演變注重簡(jiǎn)潔性和生產(chǎn)力,如C#2.0引入泛型,C#5.0引入異步編程,未來(lái)將專(zhuān)注于開(kāi)發(fā)者的生產(chǎn)力和云計(jì)算。

xml怎么改格式 xml怎么改格式 Apr 03, 2025 am 08:42 AM

可以采用多種方法修改 XML 格式:使用文本編輯器(如 Notepad )進(jìn)行手工編輯;使用在線或桌面 XML 格式化工具(如 XMLbeautifier)進(jìn)行自動(dòng)格式化;使用 XML 轉(zhuǎn)換工具(如 XSLT)定義轉(zhuǎn)換規(guī)則;或者使用編程語(yǔ)言(如 Python)進(jìn)行解析和操作。修改時(shí)需謹(jǐn)慎,并備份原始文件。

xml怎么轉(zhuǎn)換成json xml怎么轉(zhuǎn)換成json Apr 03, 2025 am 09:09 AM

將 XML 轉(zhuǎn)換為 JSON 的方法包括:使用編程語(yǔ)言(如 Python、Java、C#)編寫(xiě)腳本或程序進(jìn)行轉(zhuǎn)換;使用在線工具(如 XML 轉(zhuǎn)換為 JSON、Gojko's XML 轉(zhuǎn)換器、XML 在線工具)粘貼或上傳 XML 數(shù)據(jù)并選擇 JSON 格式輸出;使用 XML 到 JSON 轉(zhuǎn)換器(如 Oxygen XML Editor、Stylus Studio、Altova XMLSpy)執(zhí)行轉(zhuǎn)換任務(wù);使用 XSLT 樣式表將 XML 轉(zhuǎn)換為 JSON;使用數(shù)據(jù)集成工具(如 Informatic

c#多線程編程是什么  c#多線程編程用處 c#多線程編程是什么 c#多線程編程用處 Apr 03, 2025 pm 02:45 PM

C# 多線程編程是一種讓程序同時(shí)執(zhí)行多項(xiàng)任務(wù)的技術(shù),它可以通過(guò)提升性能、提高響應(yīng)能力和實(shí)現(xiàn)并行處理來(lái)提高程序效率。雖然 Thread 類(lèi)提供了直接創(chuàng)建線程的方法,但 Task 和 async/await 等高級(jí)工具可以提供更安全的異步操作和更簡(jiǎn)潔的代碼結(jié)構(gòu)。多線程編程中常見(jiàn)的難題包括死鎖、競(jìng)態(tài)條件和資源泄漏,需要仔細(xì)設(shè)計(jì)線程模型和使用適當(dāng)?shù)耐綑C(jī)制來(lái)避免這些問(wèn)題。

xml如何轉(zhuǎn)化為word xml如何轉(zhuǎn)化為word Apr 03, 2025 am 08:15 AM

有三種將 XML 轉(zhuǎn)換為 Word 的方法:使用 Microsoft Word、使用 XML 轉(zhuǎn)換器或使用編程語(yǔ)言。

xml格式怎么打開(kāi) xml格式怎么打開(kāi) Apr 02, 2025 pm 09:00 PM

用大多數(shù)文本編輯器即可打開(kāi)XML文件;若需更直觀的樹(shù)狀展示,可使用 XML 編輯器,如 Oxygen XML Editor 或 XMLSpy;在程序中處理 XML 數(shù)據(jù)則需使用編程語(yǔ)言(如 Python)與 XML 庫(kù)(如 xml.etree.ElementTree)來(lái)解析。

C#.NET:使用.NET生態(tài)系統(tǒng)構(gòu)建應(yīng)用程序 C#.NET:使用.NET生態(tài)系統(tǒng)構(gòu)建應(yīng)用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET構(gòu)建應(yīng)用?使用.NET構(gòu)建應(yīng)用可以通過(guò)以下步驟實(shí)現(xiàn):1)了解.NET基礎(chǔ)知識(shí),包括C#語(yǔ)言和跨平臺(tái)開(kāi)發(fā)支持;2)學(xué)習(xí)核心概念,如.NET生態(tài)系統(tǒng)的組件和工作原理;3)掌握基本和高級(jí)用法,從簡(jiǎn)單控制臺(tái)應(yīng)用到復(fù)雜的WebAPI和數(shù)據(jù)庫(kù)操作;4)熟悉常見(jiàn)錯(cuò)誤與調(diào)試技巧,如配置和數(shù)據(jù)庫(kù)連接問(wèn)題;5)應(yīng)用性能優(yōu)化與最佳實(shí)踐,如異步編程和緩存。

See all articles