C#Winform使用NPOI获取word中的数据
📘公众号「DotNet学习交流」,分享学习DotNet的点滴。
需求
想要获取word里面的内容,如下图所示:
有一张表和一段文本,并将它们存入数据库或者Excel。
步骤
添加NPOI的库,如下图所示:
输入NPOI,如下图所示:
选择安装
安装完成之后,需要引用NPOI.XWPF.UserModel。
在窗体上添加一个button按钮,如下图所示:
按钮点击事件的代码如下:
private void button1_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream("你的文件路径", FileMode.Open, FileAccess.Read))
{
XWPFDocument doc = new XWPFDocument(fs);
var text = doc.Paragraphs[0].Text;
XWPFTable table = doc.Tables[0];
foreach (var row in table.Rows)
{
Debug.WriteLine("Row:");
foreach (var cell in row.GetTableCells())
{
string cellText = cell.GetText();
Debug.WriteLine("Cell Text: " + cellText);
}
}
}
}
其中 using (FileStream fs = new FileStream("你的文件路径", FileMode.Open, FileAccess.Read))中第一个参数为word文件路径,第二个参数为文件模式,第三个参数为文件权限。
运行的结果,如下图所示:
查看doc,如下图所示:
可以发现整个文档,有两个元素。
其实第一个元素是一个表,如下图所示:
总共有14行。
另一个元素是段落,如下图所示:
表的文本内容如下所示:
段落的文本内容如下:
确定了doc中有我们需要的内容,现在是想着怎么把内容提取出来。
我的方案是建一个实体类,将数据导入到实体类中,修改之后的代码如下所示:
using NPOI.SS.UserModel;
using NPOI.XWPF.UserModel;
using System.Diagnostics;
using System.IO;
namespace WordDemo
{
//创建一个需要的数据类
public class WaterData
{
public string? name { get; set; }
public string? date { get; set; }
public string? wl { get; set; }
public string? fr { get; set; }
public string? source { get; set; }
}
public partial class Form1 : Form
{
//创建一个WaterData对象列表
List<WaterData> WaterDataList = new List<WaterData>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream("你的文件路径", FileMode.Open, FileAccess.Read))
{
XWPFDocument doc = new XWPFDocument(fs);
var text = doc.Paragraphs[0].Text;
XWPFTable table = doc.Tables[0];
for (int i = 1; i < table.Rows.Count; i++)
{
var waterData = new WaterData();
var tableCells = table.Rows[i].GetTableCells();
waterData.name = tableCells[0].GetText();
waterData.date = tableCells[1].GetText();
waterData.wl = tableCells[2].GetText();
waterData.fr = tableCells[3].GetText();
waterData.source = text;
WaterDataList.Add(waterData);
}
}
}
}
}
运行之后,WaterDataList中的内容如下所示:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器