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


浙公網安備 33010602011771號