ホームページ バックエンド開発 C#.Net チュートリアル C# は NPOI を使用して Word ドキュメントを生成します (テンプレートに従って)

C# は NPOI を使用して Word ドキュメントを生成します (テンプレートに従って)

Aug 07, 2018 am 10:52 AM
c#

このプロジェクトではワードエクスポートを統合する必要がありますが、私がやっていたときはオンラインドキュメントリソースが少なく、非常に乱雑だったので、それを確認して整理し、記録を作成し、NPOIの基本的な操作をいくつか共有しました困っている人たちと一緒に Word 文書を操作しています。

この記事では、Word のテキストを生成する操作、表の操作、および図の操作を説明します。これらはすべて Word を生成するための基本的な操作です。

以下はあくまで私の個人的な理解ですので、よりよいアイデアがございましたら、お気軽に追加してください。

VS2017、ソリューションを右クリックし、NuGet パッケージを管理し、プロジェクトの NPOI パッケージを検索してインストールし、引用符を付けます:
using NPOI.XWPF.UserModel;
この記事では、 NPOI バージョン 2.3.0 の場合
本題に入ります
1. テンプレートを入手します (XWPFDocument doc)
テンプレートを使用するには、まずテンプレートを入手します。次に、取得したテンプレートを NPOI のドキュメント オブジェクトの編集:
using (FileStream stream = File.OpenRead("template file address")){
としてインスタンス化します。 XWPFDocument doc = 新しい XWPFDocument(ストリーム);
//プロセスドキュメント、コードコントロール編集ドキュメント。
}
ドキュメントを処理した後、新しいファイルを生成し、それをドキュメントに書き込み、単語の生成を完了します。
FileStream file = new FileStream(生成されたファイルパス ファイル名, FileMode.Create, FileAccess.Write);
doc.Write(file);
file.Close();
doc は、テンプレートのすべてのコンテンツにアクセスします。
もう 1 つの点は、このエディタで使用されるテンプレートはすべて docx サフィックス ファイルであるということです。doc が変更されている場合、docx の読み取り時にエラーが報告され、doxc ドキュメントとして保存する必要があります。
2. テキスト処理 (XWPFParagraph para)
doc.Paragraphs ドキュメント内のすべての段落オブジェクトを取得します;
para.ParagraphText 段落のテキスト データを取得します;
para.ReplaceText (置き換えるテキスト、置換テキスト) 段落のテキストを置き換えます (テンプレート実装の鍵)

XWPFParagraph の公式リファレンスドキュメント

3. テーブル処理 ( XWPFTable テーブル)
doc.Tables ドキュメント内のすべてのテーブル オブジェクトを取得します;
ここでさらに説明する必要がありますが、doc.Tables は Word の最も外側のテーブルのみを取得し、ネストされたテーブルは含まれません。
cell.Tables を使用してネストされたセルを取得できます;
(1) テーブルの行処理 (XWPFTableRow 行)
row.Rows テーブルのすべての行を取得します;
(2) テーブルのセル処理(XWPFTableCell セル)
row.GetTableICells() ; テーブル行内のすべてのセルを取得;
セルを取得した後、次のことができます。セルのテキスト段落 (段落) を取得し、テキスト置換を実行します。
(3) 行セルを水平方向に結合します

CT_Tc cttcofRowThird = cell.GetCTTc();
CT_TcPr ctProfRowThird = cttcofRowThird.AddNewTcPr();
ctProfRowThird.gridSpan = new CT_DecimalNumber();
ctProfRowThird.gridSpan.val = num.ToString();//合并num列
ログイン後にコピー

(4) 列セルを垂直方向に結合します

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. 画像処理
NPOI バージョン 2.3.0 の画像挿入は 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/C を使用して PHP 拡張機能を作成する

[c# チュートリアル]C# データ型

以上がC# は NPOI を使用して Word ドキュメントを生成します (テンプレートに従って)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# のアクセス修飾子 C# のアクセス修飾子 Sep 03, 2024 pm 03:24 PM

C# のアクセス修飾子のガイド。 C# のアクセス修飾子の種類について、例と出力とともに説明しました。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

See all articles