C#代码实现从PDF中提取表格并另存为Excel文件
将 PDF 中的表格提取并转换为 Excel 格式具有诸多优势,例如可以在更灵活、更加熟悉的环境中对数据进行编辑、分析和可视化处理。这对于需要处理大量表格数据的研究人员、数据分析师以及各类专业人士来说尤为重要。
本文将介绍如何使用 Spire.Office for .NET,通过 C# 和 VB.NET 将 PDF 中的表格提取并导出为 Excel 文件。
安装 Spire.Office for .NET
首先,需要在 .NET 项目中引用 Spire.Office for .NET 包中的 Spire.Pdf.dll 和 Spire.Xls.dll。
其中:
- Spire.PDF 用于从 PDF 表格中提取数据;
- Spire.XLS 用于根据提取到的数据生成 Excel 文档。
你可以通过官网下载对应的 DLL 文件后手动添加引用,也可以直接通过 NuGet 进行安装,更加便捷高效。
PM> Install-Package Spire.Office
在 C#、VB.NET 中提取 PDF 文件中的表格并另存为Excel文件
Spire.PDF for .NET 提供了 PdfTableExtractor.ExtractTable(int pageIndex) 方法,用于从可搜索的 PDF 指定页面中提取表格。
通过 PdfTable.GetText(int rowIndex, int columnIndex) 方法,可以获取表格中指定单元格的文本内容。随后,借助 Spire.XLS for .NET 提供的 Worksheet.Range[row, column].Value 属性,即可将这些数据写入 Excel 工作表。
具体操作步骤如下:
- 创建
PdfDocument类的实例。 - 使用
PdfDocument.LoadFromFile()方法加载示例 PDF 文件。 - 调用
PdfTableExtractor.ExtractTable()方法,从指定页面提取表格。 - 使用
PdfTable.GetText()方法获取表格中指定单元格的文本内容。 - 创建
Workbook对象。 - 通过
Worksheet.Range.Value属性,将从 PDF 获取的单元格数据写入工作表。 - 使用
Workbook.SaveToFile()方法,将工作簿保存为 Excel 文件。
下面的代码示例演示了如何提取 PDF 文档中的所有表格,并将每个表格分别写入同一个工作簿中的独立工作表。
示例代码:
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;
namespace ExtractTablesToExcel
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载示例 PDF 文件
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\table.pdf");
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 清除默认的工作表
workbook.Worksheets.Clear();
// 初始化 PdfTableExtractor 类的实例
PdfTableExtractor extractor = new PdfTableExtractor(doc);
// 声明 PdfTable 数组
PdfTable[] tableList = null;
int sheetNumber = 1;
// 遍历 PDF 的每一页
for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
{
// 从指定页面提取表格
tableList = extractor.ExtractTable(pageIndex);
// 判断表格列表是否为空
if (tableList != null && tableList.Length > 0)
{
// 遍历当前页面中的每一个表格
foreach (PdfTable table in tableList)
{
// 添加一个新的工作表
Worksheet sheet = workbook.Worksheets.Add(
String.Format("sheet{0}", sheetNumber)
);
// 获取当前表格的行数和列数
int row = table.GetRowCount();
int column = table.GetColumnCount();
// 遍历表格的行和列
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
// 获取指定单元格的文本内容
string text = table.GetText(i, j);
// 将文本写入 Excel 指定单元格
sheet.Range[i + 1, j + 1].Value = text;
}
}
sheetNumber++;
}
}
}
// 保存为 Excel 文件
workbook.SaveToFile("ToExcel.xlsx", ExcelVersion.Version2013);
}
}
}方法补充
C#提取PDF文件中的表格并转换为Excel和CSV表格
完整代码示例:
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;
namespace ExtractTablesToExcel
{
class Program
{
static void Main(string[] args)
{
// 创建 PdfDocument 对象并加载示例PDF文件
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
// 创建 Workbook 对象并清除默认工作表
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
// 初始化 PdfTableExtractor 类的实例
PdfTableExtractor extractor = new PdfTableExtractor(doc);
// 声明 PdfTable 数组
PdfTable[]? tableList = null;
int sheetNumber = 1;
// 循环遍历页面
for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
{
// 从特定页面提取表格
tableList = extractor.ExtractTable(pageIndex);
// 判断表格列表是否为空
if (tableList != null && tableList.Length > 0)
{
// 遍历列表中的表格
foreach (PdfTable table in tableList)
{
// 添加工作表
Worksheet sheet = workbook.Worksheets.Add(string.Format("Table_{0}", sheetNumber));
// 获取特定表格的行数和列数
int row = table.GetRowCount();
int column = table.GetColumnCount();
// 循环遍历行和列
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
// 从特定单元格获取文本
string text = table.GetText(i, j);
// 将文本写入指定单元格
sheet.Range[i + 1, j + 1].Value = text;
}
}
sheet.SaveToFile("output/表格/CSV表格.csv", ",", Encoding.UTF8);
sheetNumber++;
}
}
}
// 保存为Excel工作簿
workbook.SaveToFile("output/表格/Excel表格.xlsx", ExcelVersion.Version2013);
doc.Close();
workbook.Dispose();
}
}
}
C# 提取 PDF 中的表格
如果你需要快速预览表格数据(例如,开发调试或验证提取结果),可以直接通过控制台实时输出结果,无需生成额外文件,节省开发时间。
从 PDF 表格中提取数据的关键方法:
- PdfDocument:表示一个 PDF 文件。
- LoadFromFile:加载要处理的 PDF 文件。
- PdfTableExtractor:基于视觉线索检测 PDF 中的表格。
- ExtractTable(pageIndex):提取指定页码的所有表格,返回 PdfTable 数组。
- GetRowCount()/GetColumnCount():检索每个表格的行数和列数。
- GetText(rowIndex, columnIndex):从指定单元格中提取文本。
using Spire.Pdf;
using Spire.Pdf.Utilities;
namespace ExtractPdfTable
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
// 加载PDF文件
pdf.LoadFromFile("表格.pdf");
// 初始化PdfTableExtractor类的实例
PdfTableExtractor extractor = new PdfTableExtractor(pdf);
// 循环遍历页面
for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
{
// 从特定页面提取表格
PdfTable[] tableList = extractor.ExtractTable(pageIndex);
// 判断表格列表是否为空
if (tableList != null && tableList.Length > 0)
{
int tableNumber = 1;
// 循环遍历列表中的表格
foreach (PdfTable table in tableList)
{
Console.WriteLine($"\n第 {pageIndex + 1} 页的第 {tableNumber} 个表格:");
Console.WriteLine("-----------------------------------");
// 获取特定表格的行数和列数
int row = table.GetRowCount();
int column = table.GetColumnCount();
// 循环遍历行和列
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
// 从特定单元格获取文本
string text = table.GetText(i, j);
// 将单元格文本打印到控制台并带有分隔符
Console.Write($"{text}\t");
}
// 每行后换行
Console.WriteLine();
}
tableNumber++;
}
}
}
// 关闭文档
pdf.Close();
}
}
}
C# 将 PDF 表格导出为 CSV
CSV(逗号分隔值)是表格数据的行业标准,与 Excel、Google Sheets 和数据库兼容。此方法通过引用单元格和处理特殊字符,将提取的表格格式化为有效的 CSV 文件。
提取 PDF 表格到 CSV 的主要特点:
- StreamWriter:增量写入数据到 CSV 文件,减少大型 PDF 文件的内存占用。
- 特殊字符处理:按 CSV 标准转义单元格中的逗号和双引号,避免列错位。
- 工具兼容:生成的 CSV 可直接用 Excel 打开,无需手动调整格式,减少后续操作成本。
- 编码兼容:UTF-8 编码确保中文、特殊符号在 Excel 中正常显示(避免打开时乱码)。
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Text;
namespace ExtractTableToCsv
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument pdf = new PdfDocument();
// 加载PDF文件
pdf.LoadFromFile("表格.pdf");
// 创建StreamWriter对象以高效写入CSV
using (StreamWriter csvWriter = new StreamWriter("PDF表格.csv", false, Encoding.UTF8))
{
// 创建PdfTableExtractor对象
PdfTableExtractor extractor = new PdfTableExtractor(pdf);
// 循环遍历页面
for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
{
// 从特定页面提取表格
PdfTable[] tableList = extractor.ExtractTable(pageIndex);
// 判断表格列表是否为空
if (tableList != null && tableList.Length > 0)
{
// 循环遍历列表中的表格
foreach (PdfTable table in tableList)
{
// 获取特定表格的行数和列数
int row = table.GetRowCount();
int column = table.GetColumnCount();
// 循环遍历行
for (int i = 0; i < row; i++)
{
// 创建列表存储数据
List<string> rowData = new List<string>();
// 循环遍历列
for (int j = 0; j < column; j++)
{
// 从表格单元格检索文本
string cellText = table.GetText(i, j).Replace("\"", "\"\"");
// 将单元格文本添加到列表并用双引号括起来
rowData.Add($"\"{cellText}\"");
}
// 用逗号连接单元格并写入CSV
csvWriter.WriteLine(string.Join(",", rowData));
}
}
}
}
}
}
}
}
到此这篇关于C#代码实现从PDF中提取表格并另存为Excel文件的文章就介绍到这了,更多相关C#提取PDF表格并存为Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C# CefSharp 根据输入日期段自动选择日期的操作代码
这篇文章主要介绍了C# CefSharp 根据输入日期段自动选择日期的操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2024-01-01


最新评论