C#Winform使用NPOI获取word中的数据

简介: C#Winform使用NPOI获取word中的数据

需求

想要获取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了。

目录
相关文章
|
2月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
48 1
|
1月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
14天前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
12 1
|
2天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
14天前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
27 0
|
14天前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
38 0
|
1月前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
34 8
|
18天前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
197 0
|
18天前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
50 0
|
2月前
|
开发框架 .NET C#
WPF/C#:显示分组数据的两种方式
WPF/C#:显示分组数据的两种方式
51 0