C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#提取PDF表格并存为Excel

C#代码实现从PDF中提取表格并另存为Excel文件

作者:2501_93070778

这篇文章主要为大家详细介绍了如何使用 Spire.Office for .NET将 PDF 中的表格提取并导出为 Excel 文件,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

将 PDF 中的表格提取并转换为 Excel 格式具有诸多优势,例如可以在更灵活、更加熟悉的环境中对数据进行编辑、分析和可视化处理。这对于需要处理大量表格数据的研究人员、数据分析师以及各类专业人士来说尤为重要。

本文将介绍如何使用 Spire.Office for .NET,通过 C# 和 VB.NET 将 PDF 中的表格提取并导出为 Excel 文件。

安装 Spire.Office for .NET

首先,需要在 .NET 项目中引用 Spire.Office for .NET 包中的 Spire.Pdf.dllSpire.Xls.dll

其中:

你可以通过官网下载对应的 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 工作表。

具体操作步骤如下:

下面的代码示例演示了如何提取 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 表格中提取数据的关键方法:

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 的主要特点:

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文