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

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。C#Winform使用NPOI获取word中的数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

📘公众号「DotNet学习交流」,分享学习DotNet的点滴。

需求

想要获取word里面的内容,如下图所示:

image-20231106210152965

有一张表和一段文本,并将它们存入数据库或者Excel。

步骤

添加NPOI的库,如下图所示:

image-20231106210343524

输入NPOI,如下图所示:

image-20231106210543315

选择安装

安装完成之后,需要引用NPOI.XWPF.UserModel。

在窗体上添加一个button按钮,如下图所示:

image-20231106211139220

按钮点击事件的代码如下:

 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文件路径,第二个参数为文件模式,第三个参数为文件权限。

运行的结果,如下图所示:

image-20231106211921407

查看doc,如下图所示:

image-20231106212104438

可以发现整个文档,有两个元素。

其实第一个元素是一个表,如下图所示:

image-20231106212300487

总共有14行。

另一个元素是段落,如下图所示:

image-20231107091308219

表的文本内容如下所示:

image-20231107091402442

段落的文本内容如下:

image-20231107091645913

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

image-20231107092156795

实现了我们的需求,现在可以将WaterDataList中的内容存入数据库或者Excel了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/194146.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!