全文字数1614 | 阅读需要4分钟
关键词:NPOI、Word、开源、NuGet
导读
上期小百科介绍了如何使用NPOI操作Excel,除此之外,我们工作中也经常会使用到Word,本期小百科来介绍如何在C#编程时使用NPOI创建及读写Word文件。
关于NPOI的优点及其安装在上期小百科中已经介绍过,本期不再赘述,可参考:测量小百科 | 使用NPOI操作Excel。
NPOI创建Word
在进行创建Word之前,我们要了解NPOI中关于Word的结构。
正文段落:一个文档包含多个段落Paragraph,一个段落包含多个Run,Run是文档的最小单元,代表具有相同属性的一段文本,可以包含多个图片。
正文表格:一个文档包含多个表格Table,一个表格包含多行TableRow,一行包含多列(单元格TableCell)。每个单元格的内容相当于一个完整的文档,只是没有页眉和页脚,里面可以有表格。
图 1 NPOI创建Word的基本结构
创建Word分为4步:
创建Word新实例
创建段落及其文本,写入文字
创建表格、行、单元格,写入数据
保存Word文件
首先在代码顶端添加using:
using NPOI.XWPF.UserModel;
using System.IO;
基本操作代码如下所示:
//创建word文档
XWPFDocument doc = new XWPFDocument();
//创建一个段落作为标题
XWPFParagraph ptitle = doc.CreateParagraph();
ptitle.Alignment = ParagraphAlignment.CENTER;//设置对齐方式为居中
//在该段落中创建一段文本
XWPFRun titlerun = ptitle.CreateRun();
titlerun.SetText("测试数据");//配置文字内容
titlerun.IsBold = true;//设置文字样式
titlerun.FontSize = 28;
//创建一个段落作为正文
XWPFParagraph paragraph = doc.CreateParagraph();
//在段落中创建文本
XWPFRun r1 = paragraph.CreateRun();
r1.SetText(string.Format("实验时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
//换行,再写入一行文字
XWPFRun r2 = paragraph.CreateRun();
r2.AddCarriageReturn();
r2.SetText("实验温度:26℃");
//创建一个11行2列的表格
XWPFTable table = doc.CreateTable(11, 2);
table.GetRow(0).GetCell(0).SetText("原始数据");
table.GetRow(0).GetCell(1).SetText("调制数据");
//创建待写入表格的模拟数据
double[] rawData = new double[10] { -1,-0.95,-0.8,-0.6,-0.3,0,0.5,1,2,5};
double[] data = new double[10];
for (int i = 0; i < 10; i++)
{
data[i] = rawData[i] * 2;
}
//根据单元格索引在表格中写入数据
for (int i = 0; i < 10; i++)
{
table.GetRow(i+1).GetCell(0).SetText(rawData[i].ToString());
table.GetRow(i + 1).GetCell(1).SetText(data[i].ToString());
}
//创建流文件
FileStream fs = new FileStream
(@"C:UsersjytekDesktopNOPINPOI Word.docx", FileMode.Create);
//写入文件
doc.Write(fs);
运行程序后,在对应的保存路径中得到docx文档。
图 2 创建的docx文档
结果如下:
图 3 创建的Word文档内容
NPOI读写Word
读取已存在的Word的数据
对已存在的Word进行读取只需2步:
根据要读取的Word路径创建Word新实例
根据要读取的文字的位置读取数据
具体代码如下:
//创建流文件
FileStream fs = new FileStream(@"C:UsersjytekDesktopNOPINPOI Word.docx", FileMode.Open);
//创建Word实例
XWPFDocument doc = new XWPFDocument(fs);
//获取Word中的第一个Table
XWPFTable table = doc.Tables[0];
//读取Table中第2行第1列的数据
string readValue = table.GetRow(1).GetCell(0).GetText();
Console.WriteLine(readValue);
Console.ReadKey();
运行程序,读取到对应的数据。
图 4 运行读取Word数据程序界面
对已存在的Word写入数据
对已存在的Word写入数据需要4步:
根据要读取的Word路径创建Word新实例
创建要写入的数据的run或单元格
在run或单元格中写入数据
保存Word文件
具体代码如下:
//创建流文件
FileStream fs = new FileStream
(@"C:Usersyjt10DesktopNOPINPOI Word.docx", FileMode.OpenOrCreate, FileAccess.ReadWrite);
//创建Word实例
XWPFDocument doc = new XWPFDocument(fs);
//在第二个段落中创建新的run并写入文字
doc.Paragraphs[1].CreateRun().AddCarriageReturn();
doc.Paragraphs[1].CreateRun().SetText("实验人:JYTEK");
//在Table中增加一行并对其单元格赋值
doc.Tables[0].CreateRow();
doc.Tables[0].GetRow(12).GetCell(0).SetText("10");
doc.Tables[0].GetRow(12).GetCell(1).SetText("20");
//写入文件,这里要重新创建流文件
fs = new FileStream
(@"C:UsersjytekDesktopNOPINPOI Word.docx", FileMode.OpenOrCreate, FileAccess.ReadWrite);
doc.Write(fs);
打开Word文件,即可看到新写入的数据。
图 5 写入数据后的Word
Copyright © 2016-2024 JYTEK All Rights Reserved.