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 ...
随机推荐
- 谈谈 Kafka 的幂等性 Producer
使用消息队列,我们肯定希望不丢消息,也就是消息队列组件,需要保证消息的可靠交付.消息交付的可靠性保障,有以下三种承诺: 最多一次(at most once):消息可能会丢失,但绝不会被重复发送. 至少 ...
- DXP TreeList 目录树
DXP TreeList 目录树 1.需求背景 需要一个支持勾选,拖动节点,保存各节点顺序的目录树. 2.创建目录树 在treeList控件中添加两个colunm 用来显示绑定数据和显示值. 接下来对 ...
- 让nodejs开启服务更简单--express篇
上一篇文章说到,nodejs获取客户端请求需要我们自己去处理请求参数.请求方式等,而在express框架内部集成了很多好用的方法,我们不需要从0开始编写各种处理逻辑,这样可以极大提高我们的开发效率~ ...
- 【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势
一.前言 前几天发生了一个故事,发生了这样一个情景:一位新加入的同事刚刚入职不久,领取了一台崭新的电脑.随后,他投身于一个新项目,但却遇到了一个困扰:由于这台电脑没有管理员权限,他无法在上面安装所需的 ...
- 微信的 h5 支付和 jsapi 支付
目录 申请商户号 申请商户证书 设置APIv3密钥 下载 SDK 开发包 下载平台证书 关联 AppID 账号 开通 H5 支付 H5支付流程 开通 JSAPI 支付 JSAPI 支付流程 通用微信支 ...
- 记一次MySql灾难性事件
2023年8月8日,本来系一个风和日丽的夏天中的平凡一天,但这种平凡,注定住佢一定唔平凡,唉...现在回忆起都阵阵咁痛!!! 重要嘅事情讲三次,唔好手贱,唔好手贱,唔好手贱 事日,如常上班,本人系一名 ...
- [glibc2.23源码]阅读源码&调试,找出free_hook-0x13分配失败的原因
0x00 写在前面 发freebuf了:https://www.freebuf.com/articles/endpoint/373258.html 本次阅读源码是本人第一次,算是一个全新的开始.本次看 ...
- OptiX8入门(一)optixHello
本人初学者,如有错误和更好的表述,请指出 环境:CLion+VS2022+CUDA Toolkit 12.0.1+OptiX8 下载好后打开SDK就可以看到OptiX官方提供的许多例子,CMake配置 ...
- MindSponge分子动力学模拟——使用迭代器进行系统演化(2023.09)
技术背景 在前面几篇博客中,我们已经介绍过使用MindSponge去定义一个系统以及使用MindSponge计算一个分子系统的单点能.这篇文章我们将介绍一下在MindSponge中定义迭代器Updat ...
- WPF 在MVVM模式下应用动画
一个简单的需求:当程序发生异常时候,在界面上动画显示异常信息. 这个需求看似简单,只需要try--catch到异常,然后把异常的信息写入界面就OK了. 但在MVVM时,就不是这么简单了.MVVM模式下 ...