Heim > Artikel > Backend-Entwicklung > C# nutzt NPOI zur Generierung von Word-Dokumenten (gemäß Vorlage)
Das Projekt muss den Word-Export integrieren, da es nicht viele Online-Dokumentressourcen gab und es ziemlich chaotisch war, also habe ich auch einige grundlegende Vorgänge des NPOI-Betriebs von Word überprüft Dokumente mit bedürftigen Freunden.
Dieser Artikel enthält die Vorgänge zum Generieren von Word-Text, Tabellenoperationen und Bildoperationen, die allesamt grundlegende Vorgänge zum Generieren von Word sind.
Das Folgende ist nur mein persönliches Verständnis. Wenn Sie bessere Ideen haben, können Sie diese gerne hinzufügen.
VS2017, klicken Sie mit der rechten Maustaste auf die Lösung, verwalten Sie NuGet-Pakete, suchen und installieren Sie das NPOI-Paket für das Projekt und zitieren Sie:
using NPOI.XWPF.UserModel;
Dieser Artikel verwendet die NPOI-Version für 2.3.0
Kommen wir zum Punkt··
1. Holen Sie sich die Vorlage (XWPFDocument-Dokument)
Verwenden Sie die Vorlage, holen Sie sich zuerst die Vorlage, und instanziieren Sie dann die erhaltene Vorlage als Bearbeiten des Dokumentobjekts von NPOI:
using (FileStream stream = File.OpenRead("template file address")){
XWPFDocument doc = neues XWPFDocument(stream);
//Dokument verarbeiten, Dokument zur Codesteuerung bearbeiten.
}
Generieren Sie nach der Verarbeitung des Dokuments eine neue Datei, schreiben Sie sie in das Dokument und schließen Sie die Wortgenerierung ab.
FileStream file = new FileStream(Generate file path + file name, FileMode.Create, FileAccess.Write);
doc.Write(file);
doc is us Holen Sie sich alle Inhalte der Vorlage.
Ein weiterer Punkt ist, dass die von diesem Editor verwendeten Vorlagen alle docx-Suffixdateien sind. Wenn doc geändert wird, wird beim Lesen von docx ein Fehler gemeldet und es muss als doxc-Dokument gespeichert werden.
2. Textverarbeitung (XWPFParagraph para) doc.Paragraphs Holen Sie sich alle Absatzobjekte im Dokument;
paragraphText Holen Sie sich die Textdaten des Absatzes
para.ReplaceText (zu ersetzender Text, Ersatztext) Ersetzen Sie den Text des Absatzes (der Schlüssel zur Vorlagenimplementierung)
3 Verarbeitung ( ( Schicht. Sie können cell.Tables verwenden, um verschachtelte Zellen abzurufen;
(1) Tabellenzeilenverarbeitung (XWPFTableRow-Zeile)
row.Rows Alle Zeilen der Tabelle abrufen;
(2) Tabellenzellenverarbeitung (XWPFTableCell-Zelle)
Rufen Sie alle Zellen in der Tabellenzeile ab.
Nachdem Sie die Zelle abgerufen haben, können Sie die Textabsätze (Absätze) in der abrufen Zelle und führen Sie die Textersetzung durch (3) Zeilenzellen horizontal zusammenführen row.GetTableICells() ;
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;//垂直 }
4. Bildverarbeitung Das Einfügen von Bildern in der Version 2.3.0 von NPOI integriert die Änderung der XML-Datei nicht, daher muss sie handschriftlich kompiliert werden (natürlich habe ich sie kopiert).
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; }
Ich höre heute hier auf und füge später weitere hinzu, wenn ich mehr zunehme. Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonC# nutzt NPOI zur Generierung von Word-Dokumenten (gemäß Vorlage). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!