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中的内容如下所示:

实现了我们的需求,现在可以将WaterDataList中的内容存入数据库或者Excel了。
C#Winform使用NPOI获取word中的数据的更多相关文章
- Java 获取Word中的标题大纲(目录)
概述 Word中的标题可通过"样式"中的选项来快速设置(如图1), 图1 在添加目录时,可将"有效样式"设置为"目录级别"显示(如图2),一 ...
- 替换word中的数据,并给导入word的图片添加水印
public static void ExportWord(string tempFilePath, string outPath, Dictionary<string, string> ...
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...
- 基于BootStrap的initupload()实现Excel上传和获取excel中的数据
简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group&q ...
- Springboot中使用自定义参数注解获取 token 中用户数据
使用自定义参数注解获取 token 中User数据 使用背景 在springboot项目开发中需要从token中获取用户信息时通常的方式要经历几个步骤 拦截器中截获token TokenUtil工具类 ...
- Java 获取Word中指定图片的坐标位置
本文介绍通过Java程序获取Word文档中指定图片的坐标位置. 程序运行环境: Word测试文档:.docx 2013 Free Spire.doc.jar 3.9.0 IntelliJ IDEA J ...
- 使用 UEditor 编辑器获取数据库中的数据
在 ThinkPHP 3.2.2 中,使用 UEditor 编辑器获取数据库中保存的数据,可以使用 UEditor 自身提供的方法. 首先在视图模板中实例化编辑器,这是出现编辑器界面的必须的行为: & ...
- SharePoint 2010 获取列表中所有数据(包括文件夹内)的方法
转: http://blog.csdn.net/wangwenism/article/details/8751411 SharePoint的列表能存储文件以及文件夹,用户使用的时候,经常会建几个分类文 ...
- JSP中获取jstl中的数据
我们在编程JSP时,有时会须要訪问jstl中的数据,或者说是el表达式中的数据. 比方, <c:forEach varStatus="data1" var=" ...
- 获取ASPxGridView 中的数据(仅仅是获取;注意模板是如何获取的)
1.取得控件值 using System.Collections.Generic; //取得当前控件值的集合 直接寻找控件的ID List<object> keyValues = this ...
随机推荐
- 2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上 给定一个长度为n的数组ar
2023-08-06:小青蛙住在一条河边, 它想到河对岸的学校去学习 小青蛙打算经过河里 的石头跳到对岸 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上 给定一个长度为n的数组ar ...
- HTML5CSS3基础
目录 HTML5CSS3基础 1 2D 转换 1.1 二维坐标系 1.2 2D 转换之移动 translate 1.3 2D 转换之旋转 rotate 1.4 2D 转换中心点 transform-o ...
- react项目搭建-路由封装
router v6 路由统一管理与添加,对是否登录进行判断. 1.使用脚手架创建项目 新建一个文件夹 ,在文件夹内部打开命令行工具. 执行命令:npx create-react-app 项目名字 将项 ...
- ABP Framework 7.4 RC 新增功能简介:增强微服务架构支持
ABP Framework 版本号:7.4.0-rc.1 发布时间:2023.8.16 阅读原文:ABP.IO Platform 7.4 RC Has Been Published 翻译:iEricL ...
- 使用 Sealos 在离线环境中光速安装 K8s 集群
作者:尹珉.Sealos 开源社区 Ambassador,云原生爱好者. 当容器化交付遇上离线环境 在当今快节奏的软件交付环境中,容器化交付已经成为许多企业选择的首选技术手段.在可以访问公网的环境下, ...
- MQ系列14:MQ如何做到消息延时处理
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- 文心一言 VS 讯飞星火 VS chatgpt (91)-- 算法导论8.3 4题
四.用go语言,说明如何在 O(n) 时间内,对 0 到 $n^3-1$ 区间内的n个整数进行排序. 文心一言: 在 O(n) 时间内对 0 到 n^3-1 区间内的 n 个整数进行排序,可以使用基数 ...
- Tcp/Ip协议 A类B类C类D类 地址
TCP(传输控制协议):负责和远程主机连接 Ip(网际协议):负责寻址,使报文发送到其该在的地方 Ip地址:是TCP/IP的网络层用以标识网络中主机的逻辑地址,可以唯一标识Interent中的一台主 ...
- 「codeforces - 1394C」Boboniu and String
link. 注意到 BN-string 长成什么样根本不重要,我们把它表述为 BN-pair \((x, y)\) 即可,两个 BN-strings 相似的充要条件即两者分别映射得到的 BN-pair ...
- 2022 ICPC 杭州站
gym 知乎 尝试先读题而不是写缺省源感觉不太好 E 一头雾水.F 是签到就先上去写了,结果读错题交了个样例都没过的代码,小改了一下就过了.G 不太会做.zsy 把 M 丢给我想了一下 然后 gjk ...