在日常工作和学习中,我们经常需要处理包含各种表格数据的 word 文档。这些表格可能包含重要的统计数据、财务信息或其他关键内容。有时我们需要从 word 文档中提取这些表格,以便进行进一步的数据分析、整理或与他人共享。在这篇文章中,我们将介绍如何使用 spire.doc for .net 和 c# 从 word 文档中提取表格。
安装 spire.doc for .net
首先,您需要将 spire.doc for.net 包含的 dll 文件作为引用添加到您的 .net 项目中。dll 文件可以从此链接下载,也可以通过 安装。
pm> install-package spire.doc
c# 从 word 文档中提取表格
在 spire.doc for .net 中,section.tables 属性用于访问 word 文档特定节中包含的表格。该属性返回一个 itable 对象的集合,每个对象代表该节中的一个独立表格。获取 itable 对象后,就可以遍历它们的行和单元格,并使用 cell.paragraphs[index].text 属性来提取每个单元格的文本内容。
从 word 文档中提取表格的详细步骤如下:
- 创建 document 类的对象,并使用 document.loadfromfile() 方法加载 word 文档。
- 遍历文档中的各个节,通过 section.tables 属性获取每个节中的表格集合。
- 遍历每个节中的表格,为每个表格创建一个 string 对象。
- 遍历每个表格的行和行中的单元格,然后通过 tablecell.paragraphs[index].text 属性获取每个单元格的文本,并将其添加到 string 对象中。
- 将每个 string 对象保存为一个文本文件。
- c#
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)
{
// 创建 document 类的对象
document doc = new document();
// 加载 word 文档
doc.loadfromfile("表格.docx");
// 遍历文档中的各个节
for (int sectionindex = 0; sectionindex < doc.sections.count; sectionindex )
{
// 获取当前节
section section = doc.sections[sectionindex];
// 获取当前节中的表格集合
tablecollection tables = section.tables;
// 遍历节中的各个表格
for (int tableindex = 0; tableindex < tables.count; tableindex )
{
// 获取当前表格
itable table = tables[tableindex];
// 初始化一个string对象来存储表格数据
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 = table.rows[rowindex].cells[cellindex];
// 获取单元格中的文本
string celltext = "";
for (int paraindex = 0; paraindex < cell.paragraphs.count; paraindex )
{
celltext = (cell.paragraphs[paraindex].text.trim() " ");
}
// 将文本添加到string对象中
tabledata = celltext.trim();
if (cellindex < table.rows[rowindex].cells.count - 1)
{
tabledata = "\t";
}
}
// 添加一个新行
tabledata = "\n";
}
// 将表格数据保存到文本文件中
string filepath = path.combine("表格", $"section{sectionindex 1}_table{tableindex 1}.txt");
file.writealltext(filepath, tabledata, encoding.utf8);
}
}
doc.close();
}
}
}
c# 从 word 文档中提取表格并保存到 excel 表格
除了将提取的表格数据保存到文本文件之外,你还可以使用 spire.xls for .net 库直接将数据写入 excel 工作表。但在使用 spire.xls 之前,你需要通过 安装它:
install-package spire.xls
从 word 文档提取表格数据并保存到 excel 工作表的详细步骤如下:
- 创建 document 类的对象,并使用 document.loadfromfile() 方法加载 word 文档。
- 创建 workbook 类的对象,并使用 workbook.worksheets.clear() 方法清除默认的工作表。
- 遍历文档中的各个节,通过 section.tables 属性获取每个节中的表格集合。
- 遍历每个节中的表格,并使用 workbook.worksheets.add() 方法为每个表格添加一个工作表。
- 遍历每个表格的行和行中的单元格,然后通过 tablecell.paragraphs[index].text 属性获取每个单元格的文本,并使用 worksheet.setcellvalue() 方法将其写入工作表。
- 使用 workbook.savetofile() 方法将结果文件保存为一个 excel 文件。
- c#
using spire.doc;
using spire.doc.interface;
using spire.xls;
namespace extractwordtabletoexcel
{
internal class program
{
static void main(string[] args)
{
// 创建 document 类的对象
document doc = new document();
// 加载 word 文档
doc.loadfromfile("表格.docx");
// 创建 workbook 类的对象
workbook wb = new workbook();
// 删除默认工作表
wb.worksheets.clear();
// 遍历文档中的各个节
for (int sectionindex = 0; sectionindex < doc.sections.count; sectionindex )
{
// 获取当前节
section section = doc.sections[sectionindex];
// 遍历节中的各个表格
for (int tableindex = 0; tableindex < section.tables.count; tableindex )
{
// 获取当前表格
itable table = section.tables[tableindex];
// 添加一个工作表到工作簿中
worksheet ws = wb.worksheets.add($"section{sectionindex 1}_table{tableindex 1}");
// 遍历表格中的行
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() " ");
}
// 将单元格文本写入工作表
ws.setcellvalue(rowindex 1, cellindex 1, celltext);
}
// 自动调整工作表中列的宽度
ws.range.autofitcolumns();
}
}
}
// 将工作簿保存为 excel 文件
wb.savetofile("表格/word表格转excel.xlsx", excelversion.version2016);
doc.close();
wb.dispose();
}
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。