Heim > Backend-Entwicklung > C#.Net-Tutorial > C# nutzt NPOI zur Generierung von Word-Dokumenten (gemäß Vorlage)

C# nutzt NPOI zur Generierung von Word-Dokumenten (gemäß Vorlage)

php是最好的语言
Freigeben: 2018-08-07 10:52:36
Original
16926 Leute haben es durchsucht

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)

Offizielles Referenzdokument von XWPFParagraph

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列
Nach dem Login kopieren


(4) Spaltenzellen vertikal zusammenführen
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;//垂直
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ich höre heute hier auf und füge später weitere hinzu, wenn ich mehr zunehme. Verwandte Empfehlungen:

PHP-Erweiterung mit C/C++ schreiben


[c#-Tutorial] C#-Datentypen

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!

Verwandte Etiketten:
c#
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage