公众号「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中的数据的更多相关文章

  1. Java 获取Word中的标题大纲(目录)

    概述 Word中的标题可通过"样式"中的选项来快速设置(如图1), 图1 在添加目录时,可将"有效样式"设置为"目录级别"显示(如图2),一 ...

  2. 替换word中的数据,并给导入word的图片添加水印

    public static void ExportWord(string tempFilePath, string outPath, Dictionary<string, string> ...

  3. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  4. 基于BootStrap的initupload()实现Excel上传和获取excel中的数据

    简单说明:后边要做exl解析(还没做呢),所以先有一个excel的的上传以及获取excel中的数据,展示出来. 代码: //html代码 <div class="btn-group&q ...

  5. Springboot中使用自定义参数注解获取 token 中用户数据

    使用自定义参数注解获取 token 中User数据 使用背景 在springboot项目开发中需要从token中获取用户信息时通常的方式要经历几个步骤 拦截器中截获token TokenUtil工具类 ...

  6. Java 获取Word中指定图片的坐标位置

    本文介绍通过Java程序获取Word文档中指定图片的坐标位置. 程序运行环境: Word测试文档:.docx 2013 Free Spire.doc.jar 3.9.0 IntelliJ IDEA J ...

  7. 使用 UEditor 编辑器获取数据库中的数据

    在 ThinkPHP 3.2.2 中,使用 UEditor 编辑器获取数据库中保存的数据,可以使用 UEditor 自身提供的方法. 首先在视图模板中实例化编辑器,这是出现编辑器界面的必须的行为: & ...

  8. SharePoint 2010 获取列表中所有数据(包括文件夹内)的方法

    转: http://blog.csdn.net/wangwenism/article/details/8751411 SharePoint的列表能存储文件以及文件夹,用户使用的时候,经常会建几个分类文 ...

  9. JSP中获取jstl中的数据

    我们在编程JSP时,有时会须要訪问jstl中的数据,或者说是el表达式中的数据. 比方, <c:forEach    varStatus="data1" var=" ...

  10. 获取ASPxGridView 中的数据(仅仅是获取;注意模板是如何获取的)

    1.取得控件值 using System.Collections.Generic; //取得当前控件值的集合 直接寻找控件的ID List<object> keyValues = this ...

随机推荐

  1. Cilium系列-13-启用XDP加速及Cilium性能调优总结

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  2. centos7安装weblogic

    前言 简介:weblogic是java应用服务器软件的一种,类似于tomcat,但功能更多,适用于大型应用场景. 版本: 系统:centos 7(最小化安装,无图形化界面) jdk: oraclejd ...

  3. java file I/O流

    一.File的简介:(java.io包) 生活中的文件: (1)文件的作用:持久化(瞬时状态的对立面状态) (1)文件的定义:一堆数据的集合 (2)文件存储的位置:磁盘,硬盘,软盘,U盘等等 计算机中 ...

  4. 搞懂 Vue3 中的各种 ref:toRef,toRefs,isRef,unref...

    在 Vue3 中,有许多与响应式相关的函数,例如 toRef.toRefs.isRef.unref 等等.合理地使用这些函数可以在实际开发中大大提高效率.本文将详细介绍这些函数的用法,让我们在实际开发 ...

  5. Vue的数据更新,页面不更新的解决办法

    可能原因 更新的数据跟源数据不是同一个,即不是同一个引用 解决办法 最稳妥的办法,可通过拿到源数据取索引的方式进行数据的更新,如: 有一个源数据叫:originData 那么如果在更新时,通过this ...

  6. AI绘画创意文字全流程揭秘,你的终极文字艺术实操宝典

    本教程收集于:AIGC从入门到精通教程汇总 AIGC技术不断更新迭代,国内出现了越来越多的新玩法,比如最近大家都在热议的AI绘画创意文字. 过去的一周,我把这些新玩法都研究了一遍,并总结了一套完整的制 ...

  7. Python之os模块常用命令

    OS模块介绍 os模块是Python标准库中的一个用于访问操作系统相关功能的模块,os模块提供了一种可移植的使用 操作系统功能的方法.使用os模块中提供的接口,可以实现跨平台访问.该模块包含了大量的操 ...

  8. 谁家面试往死里问 Swagger 啊?

    大家好,我是小富- 前言 说个挺奇葩的事,有个老铁给我发私信吐槽了一下它的面试经历,他去了个国企单位面试,然后面试官跟他就Swagger的问题聊了半个多小时.额- 面试嘛这些都不稀奇,总能遇到是千奇百 ...

  9. 使用docker搭建seafile服务器

    工作需要在单位和家里的不同电脑上同步指定文件夹及其内容.对比了一些解决方案,最终还是选择熟悉的seafile来做. 需要按照官方文档进行seafile的安装,选择官方推荐的docker方式快速部署. ...

  10. Django框架项目之上线——docker、部署上线

    文章目录 Docker CentOS安装Docker 设置管理Docker的仓库 安装Docker Engine-Community Docker基础命令 开启关闭 镜像操作 容器操作 Docker安 ...