


The project needs to integrate word export. When I was doing it, there were not many online document resources and it was quite messy, so I checked, sorted it out, made a record, and also shared some basic operations of NPOI operating Word documents with those in need. friend.
This article includes the operations of generating Word text, table operations, and picture operations, which are all basic operations for generating Word.
The following is just my personal understanding. If you have any better ideas, please feel free to add.
VS2017, right-click the solution, manage NuGet packages, search and install the NPOI package for the project, and quote:
using NPOI.XWPF.UserModel;
This article uses the NPOI version For 2.3.0
Let’s get to the point··
1. Get the template (XWPFDocument doc)
Use the template, first get the template, and then instantiate the obtained template as Edit the document object of NPOI:
using (FileStream stream = File.OpenRead("template file address")){
XWPFDocument doc = new XWPFDocument(stream);
//Process doc, code control editing document.
}
After processing the doc, generate a new file, write it into the doc, and complete the word generation.
FileStream file = new FileStream(generated file path file name, FileMode.Create, FileAccess.Write);
doc.Write(file);
file.Close();
doc is what we get to all contents of the template.
Another point is that the templates used by this editor are all docx suffix files. If doc is modified, an error will be reported when reading docx, and it needs to be saved as a doxc document.
2. Text processing (XWPFParagraph para)
doc.Paragraphs Gets all the paragraph objects in the document;
para.ParagraphText Gets the text data of the paragraph;
para.ReplaceText (text to be replaced, replacement text) Replace the text of the paragraph (the key to template implementation)
Official reference document of XWPFParagraph
3. Table processing ( XWPFTable table)
doc.Tables Gets all table objects in the document;
It is necessary to say more here, doc.Tables only gets the outermost table in Word, not including the nested ones layer.
You can use cell.Tables to get nested cells;
(1) Table row processing (XWPFTableRow row)
row.Rows Get all the rows of the table;
(2) Table cell processing (XWPFTableCell cell) row.GetTableICells() ;
Get all the cells in the table row;
After getting the cell, you can get the cell Text paragraphs (Paragraphs) in and perform text replacement
(3) Merge row cells horizontally
CT_Tc cttcofRowThird = cell.GetCTTc(); CT_TcPr ctProfRowThird = cttcofRowThird.AddNewTcPr(); ctProfRowThird.gridSpan = new CT_DecimalNumber(); ctProfRowThird.gridSpan.val = num.ToString();//合并num列
(4) Merge column cells vertically
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;//垂直 }
4. Image processing
The image insertion of the NPOI version 2.3.0 does not integrate the modification of the xml file, so it needs to be compiled by handwriting (of course, I copied it).
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; }
I’ll stop here today, and I’ll add more later if I gain more.
Related recommendations:
The above is the detailed content of C# uses NPOI to generate Word documents (according to template). For more information, please follow other related articles on the PHP Chinese website!

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

C# is a modern, object-oriented programming language developed by Microsoft and as part of the .NET framework. 1.C# supports object-oriented programming (OOP), including encapsulation, inheritance and polymorphism. 2. Asynchronous programming in C# is implemented through async and await keywords to improve application responsiveness. 3. Use LINQ to process data collections concisely. 4. Common errors include null reference exceptions and index out-of-range exceptions. Debugging skills include using a debugger and exception handling. 5. Performance optimization includes using StringBuilder and avoiding unnecessary packing and unboxing.

Testing strategies for C#.NET applications include unit testing, integration testing, and end-to-end testing. 1. Unit testing ensures that the minimum unit of the code works independently, using the MSTest, NUnit or xUnit framework. 2. Integrated tests verify the functions of multiple units combined, commonly used simulated data and external services. 3. End-to-end testing simulates the user's complete operation process, and Selenium is usually used for automated testing.

Interview with C# senior developer requires mastering core knowledge such as asynchronous programming, LINQ, and internal working principles of .NET frameworks. 1. Asynchronous programming simplifies operations through async and await to improve application responsiveness. 2.LINQ operates data in SQL style and pay attention to performance. 3. The CLR of the NET framework manages memory, and garbage collection needs to be used with caution.

C#.NET interview questions and answers include basic knowledge, core concepts, and advanced usage. 1) Basic knowledge: C# is an object-oriented language developed by Microsoft and is mainly used in the .NET framework. 2) Core concepts: Delegation and events allow dynamic binding methods, and LINQ provides powerful query functions. 3) Advanced usage: Asynchronous programming improves responsiveness, and expression trees are used for dynamic code construction.

C#.NET is a popular choice for building microservices because of its strong ecosystem and rich support. 1) Create RESTfulAPI using ASP.NETCore to process order creation and query. 2) Use gRPC to achieve efficient communication between microservices, define and implement order services. 3) Simplify deployment and management through Docker containerized microservices.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.