C#結(jié)合Spire.Doc實現(xiàn)自動化提取Word表格數(shù)據(jù)
在日常辦公和開發(fā)中,我們經(jīng)常需要從Word文檔中提取表格數(shù)據(jù)進行二次處理(如導(dǎo)入數(shù)據(jù)庫、數(shù)據(jù)分析等)。本文將介紹如何使用C#結(jié)合Spire.Doc庫實現(xiàn)Word表格的提取,并將提取的內(nèi)容保存為文本文件。
工具與環(huán)境準(zhǔn)備
要實現(xiàn)Word表格提取,我們需要以下工具和組件:
- 開發(fā)環(huán)境:Visual Studio(或其他 C# 開發(fā)工具)
- .NET Framework/.NET Core(本文代碼兼容主流版本)
- 第三方庫:Spire.Doc(用于解析 Word 文檔結(jié)構(gòu),處理表格數(shù)據(jù))
Spire.Doc 是一個功能強大的Word文檔處理庫,支持讀取、編輯、生成Word文檔,尤其對表格、段落等元素的處理非常便捷。我們可以通過 NuGet 包管理器安裝它:在項目中右鍵“管理NuGet包”,搜索 “Spire.Doc” 并安裝。
如何通過 C# 提取 Word 表格
實現(xiàn)思路
從Word中提取表格的核心思路是“逐層解析文檔結(jié)構(gòu)”:
- 加載Word文檔,獲取文檔對象
- 遍歷文檔中的“節(jié)(Section)”(Word文檔的基本結(jié)構(gòu)單位)
- 在每個節(jié)中獲取表格集合,遍歷所有表格
- 對每個表格,逐行、逐單元格提取文本內(nèi)容
- 將提取的表格數(shù)據(jù)按格式保存到文本文件
完整代碼
以下是提取Word表格的完整代碼,我們將逐步解析其核心邏輯:
using?Spire.Doc;
using?Spire.Doc.Collections;
using?Spire.Doc.Interface;
using?System.IO;
using?System.Text;
namespace?ExtractWordTable
{
????internal?class?Program
????{
????????static?void?Main(string[]?args)
????????{
????????????//?創(chuàng)建文檔對象
????????????Document?doc?=?new?Document();
????????????//?加載Word文檔
????????????doc.LoadFromFile("Tables.docx");
????????????//?遍歷文檔中的所有節(jié)
????????????for?(int?sectionIndex?=?0;?sectionIndex?<?doc.Sections.Count;?sectionIndex++)
????????????{
????????????????Section?section?=?doc.Sections[sectionIndex];
????????????????//?獲取當(dāng)前節(jié)中的所有表格
????????????????TableCollection?tables?=?section.Tables;
????????????????//?遍歷當(dāng)前節(jié)中的所有表格
????????????????for?(int?tableIndex?=?0;?tableIndex?<?tables.Count;?tableIndex++)
????????????????{
????????????????????ITable?table?=?tables[tableIndex];
????????????????????//?用于存儲當(dāng)前表格的所有數(shù)據(jù)
????????????????????string?tableData?=?"";
????????????????????//?遍歷表格中的所有行
????????????????????for?(int?rowIndex?=?0;?rowIndex?<?table.Rows.Count;?rowIndex++)
????????????????????{
????????????????????????TableRow?row?=?table.Rows[rowIndex];
????????????????????????//?遍歷行中的所有單元格
????????????????????????for?(int?cellIndex?=?0;?cellIndex?<?row.Cells.Count;?cellIndex++)
????????????????????????{
????????????????????????????TableCell?cell?=?row.Cells[cellIndex];
????????????????????????????//?提取單元格文本(單元格可能包含多個段落)
????????????????????????????string?cellText?=?"";
????????????????????????????for?(int?paraIndex?=?0;?paraIndex?<?cell.Paragraphs.Count;?paraIndex++)
????????????????????????????{
????????????????????????????????cellText?+=?(cell.Paragraphs[paraIndex].Text.Trim()?+?"?");
????????????????????????????}
????????????????????????????//?拼接單元格文本,用制表符分隔不同單元格
????????????????????????????tableData?+=?cellText.Trim();
????????????????????????????if?(cellIndex?<?row.Cells.Count?-?1)
????????????????????????????{
????????????????????????????????tableData?+=?"\t";
????????????????????????????}
????????????????????????}
????????????????????????//?行結(jié)束后換行
????????????????????????tableData?+=?"\n";
????????????????????}
????????????????????//?保存表格數(shù)據(jù)到文本文件)
????????????????????string?filePath?=?Path.Combine("Tables",?$"Section{sectionIndex?+?1}_Table{tableIndex?+?1}.txt");
????????????????????File.WriteAllText(filePath,?tableData,?Encoding.UTF8);
????????????????}
????????????}
????????????doc.Close();
????????}
????}
}
代碼核心邏輯解析
1. 遍歷文檔結(jié)構(gòu)
Word 文檔的結(jié)構(gòu)是“文檔(Document)→ 節(jié)(Section)→ 表格(Table)→ 行(Row)→ 單元格(Cell)”,因此我們需要逐層遍歷:
- 節(jié)(Section) :一個Word文檔可以包含多個節(jié)(如不同的頁面設(shè)置、分欄等),通過
doc.Sections獲取所有節(jié)。 - 表格(Table) :每個節(jié)中可能包含多個表格,通過
section.Tables獲取當(dāng)前節(jié)的表格集合。
2. 提取單元格文本
單元格(TableCell)中的內(nèi)容可能包含多個段落(Paragraph),因此需要遍歷所有段落并拼接文本:
string?cellText?=?"";
for?(int?paraIndex?=?0;?paraIndex?<?cell.Paragraphs.Count;?paraIndex++)
{
????cellText?+=?(cell.Paragraphs[paraIndex].Text.Trim()?+?"?");
}
使用 Trim() 去除文本前后的空白,避免多余空格影響格式。
實用擴展方向
基于本文代碼,可進一步擴展功能,滿足更多場景需求:
- 將提取的表格數(shù)據(jù)導(dǎo)出為 Excel 文件(結(jié)合 Spire.XLS 庫)
- 對提取的文本進行清洗(如去除特殊符號、格式轉(zhuǎn)換)
- 批量處理多個Word文檔(遍歷文件夾中的所有.docx文件)
通過上述方法,我們可以高效地從 Word 文檔中提取表格數(shù)據(jù),為后續(xù)的數(shù)據(jù)處理提供便利。相比原生 Office Interop,Spire.Doc 無需依賴 Office 客戶端,運行更輕量化;代碼邏輯清晰,可直接復(fù)用或二次開發(fā)。
到此這篇關(guān)于C#結(jié)合Spire.Doc實現(xiàn)自動化提取Word表格數(shù)據(jù)的文章就介紹到這了,更多相關(guān)C#提取Word表格數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WPF實現(xiàn)雷達圖(仿英雄聯(lián)盟)的示例代碼
這篇文章主要介紹了如何利用WPF實現(xiàn)雷達圖(仿英雄聯(lián)盟)的繪制,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2022-07-07
c#使用ManagedWifi查看當(dāng)前Wifi信號并選擇wifi的示例
這篇文章主要介紹了c#使用ManagedWifi查看當(dāng)前Wifi信號并選擇wifi的示例,需要的朋友可以參考下2014-04-04
C#如何實現(xiàn)Excel中圖片的提取與本地保存方法
這篇文章主要介紹了C#實現(xiàn)Excel中圖片的提取與本地保存方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
C#代碼實現(xiàn)將Excel中的圖表轉(zhuǎn)換為圖片
圖表通常用于 Microsoft Excel 文件中,以可視化展示數(shù)值數(shù)據(jù),本文將演示如何使用 Spire.XLS for .NET,通過 C# 和 VB.NET 將 Excel 中的圖表轉(zhuǎn)換為圖片,感興趣的小伙伴可以了解下2025-12-12

