最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#代碼實(shí)現(xiàn)從PDF中提取表格并另存為Excel文件

 更新時(shí)間:2026年02月25日 08:23:54   作者:2501_93070778  
這篇文章主要為大家詳細(xì)介紹了如何使用?Spire.Office?for?.NET將?PDF?中的表格提取并導(dǎo)出為?Excel?文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

將 PDF 中的表格提取并轉(zhuǎn)換為 Excel 格式具有諸多優(yōu)勢(shì),例如可以在更靈活、更加熟悉的環(huán)境中對(duì)數(shù)據(jù)進(jìn)行編輯、分析和可視化處理。這對(duì)于需要處理大量表格數(shù)據(jù)的研究人員、數(shù)據(jù)分析師以及各類(lèi)專(zhuān)業(yè)人士來(lái)說(shuō)尤為重要。

本文將介紹如何使用 Spire.Office for .NET,通過(guò) C# 和 VB.NET 將 PDF 中的表格提取并導(dǎo)出為 Excel 文件。

安裝 Spire.Office for .NET

首先,需要在 .NET 項(xiàng)目中引用 Spire.Office for .NET 包中的 Spire.Pdf.dllSpire.Xls.dll

其中:

  • Spire.PDF 用于從 PDF 表格中提取數(shù)據(jù);
  • Spire.XLS 用于根據(jù)提取到的數(shù)據(jù)生成 Excel 文檔。

你可以通過(guò)官網(wǎng)下載對(duì)應(yīng)的 DLL 文件后手動(dòng)添加引用,也可以直接通過(guò) NuGet 進(jìn)行安裝,更加便捷高效。

PM> Install-Package Spire.Office

在 C#、VB.NET 中提取 PDF 文件中的表格并另存為Excel文件

Spire.PDF for .NET 提供了 PdfTableExtractor.ExtractTable(int pageIndex) 方法,用于從可搜索的 PDF 指定頁(yè)面中提取表格。
通過(guò) PdfTable.GetText(int rowIndex, int columnIndex) 方法,可以獲取表格中指定單元格的文本內(nèi)容。隨后,借助 Spire.XLS for .NET 提供的 Worksheet.Range[row, column].Value 屬性,即可將這些數(shù)據(jù)寫(xiě)入 Excel 工作表。

具體操作步驟如下:

  • 創(chuàng)建 PdfDocument 類(lèi)的實(shí)例。
  • 使用 PdfDocument.LoadFromFile() 方法加載示例 PDF 文件。
  • 調(diào)用 PdfTableExtractor.ExtractTable() 方法,從指定頁(yè)面提取表格。
  • 使用 PdfTable.GetText() 方法獲取表格中指定單元格的文本內(nèi)容。
  • 創(chuàng)建 Workbook 對(duì)象。
  • 通過(guò) Worksheet.Range.Value 屬性,將從 PDF 獲取的單元格數(shù)據(jù)寫(xiě)入工作表。
  • 使用 Workbook.SaveToFile() 方法,將工作簿保存為 Excel 文件。

下面的代碼示例演示了如何提取 PDF 文檔中的所有表格,并將每個(gè)表格分別寫(xiě)入同一個(gè)工作簿中的獨(dú)立工作表。

示例代碼:

using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;

namespace ExtractTablesToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建 PdfDocument 對(duì)象
            PdfDocument doc = new PdfDocument();

            // 加載示例 PDF 文件
            doc.LoadFromFile(@"C:\Users\Administrator\Desktop\table.pdf");

            // 創(chuàng)建 Workbook 對(duì)象
            Workbook workbook = new Workbook();

            // 清除默認(rèn)的工作表
            workbook.Worksheets.Clear();

            // 初始化 PdfTableExtractor 類(lèi)的實(shí)例
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            // 聲明 PdfTable 數(shù)組
            PdfTable[] tableList = null;

            int sheetNumber = 1;

            // 遍歷 PDF 的每一頁(yè)
            for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
            {
                // 從指定頁(yè)面提取表格
                tableList = extractor.ExtractTable(pageIndex);

                // 判斷表格列表是否為空
                if (tableList != null && tableList.Length > 0)
                {
                    // 遍歷當(dāng)前頁(yè)面中的每一個(gè)表格
                    foreach (PdfTable table in tableList)
                    {
                        // 添加一個(gè)新的工作表
                        Worksheet sheet = workbook.Worksheets.Add(
                            String.Format("sheet{0}", sheetNumber)
                        );

                        // 獲取當(dāng)前表格的行數(shù)和列數(shù)
                        int row = table.GetRowCount();
                        int column = table.GetColumnCount();

                        // 遍歷表格的行和列
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < column; j++)
                            {
                                // 獲取指定單元格的文本內(nèi)容
                                string text = table.GetText(i, j);

                                // 將文本寫(xiě)入 Excel 指定單元格
                                sheet.Range[i + 1, j + 1].Value = text;
                            }
                        }

                        sheetNumber++;
                    }
                }
            }

            // 保存為 Excel 文件
            workbook.SaveToFile("ToExcel.xlsx", ExcelVersion.Version2013);
        }
    }
}

方法補(bǔ)充

C#提取PDF文件中的表格并轉(zhuǎn)換為Excel和CSV表格

完整代碼示例:

using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;

namespace ExtractTablesToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建 PdfDocument 對(duì)象并加載示例PDF文件
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("示例.pdf");

            // 創(chuàng)建 Workbook 對(duì)象并清除默認(rèn)工作表
            Workbook workbook = new Workbook();
            workbook.Worksheets.Clear();

            // 初始化 PdfTableExtractor 類(lèi)的實(shí)例
            PdfTableExtractor extractor = new PdfTableExtractor(doc);

            // 聲明 PdfTable 數(shù)組
            PdfTable[]? tableList = null;

            int sheetNumber = 1;

            // 循環(huán)遍歷頁(yè)面
            for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
            {
                // 從特定頁(yè)面提取表格
                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));

                        // 獲取特定表格的行數(shù)和列數(shù)
                        int row = table.GetRowCount();
                        int column = table.GetColumnCount();

                        // 循環(huán)遍歷行和列
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < column; j++)
                            {
                                // 從特定單元格獲取文本
                                string text = table.GetText(i, j);

                                // 將文本寫(xiě)入指定單元格
                                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 中的表格

如果你需要快速預(yù)覽表格數(shù)據(jù)(例如,開(kāi)發(fā)調(diào)試或驗(yàn)證提取結(jié)果),可以直接通過(guò)控制臺(tái)實(shí)時(shí)輸出結(jié)果,無(wú)需生成額外文件,節(jié)省開(kāi)發(fā)時(shí)間。

從 PDF 表格中提取數(shù)據(jù)的關(guān)鍵方法:

  • PdfDocument:表示一個(gè) PDF 文件。
  • LoadFromFile:加載要處理的 PDF 文件。
  • PdfTableExtractor:基于視覺(jué)線索檢測(cè) PDF 中的表格。
  • ExtractTable(pageIndex):提取指定頁(yè)碼的所有表格,返回 PdfTable 數(shù)組。
  • GetRowCount()/GetColumnCount():檢索每個(gè)表格的行數(shù)和列數(shù)。
  • GetText(rowIndex, columnIndex):從指定單元格中提取文本。
using Spire.Pdf;
using Spire.Pdf.Utilities;

namespace ExtractPdfTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建PdfDocument對(duì)象
            PdfDocument pdf = new PdfDocument();

            // 加載PDF文件
            pdf.LoadFromFile("表格.pdf");

            // 初始化PdfTableExtractor類(lèi)的實(shí)例
            PdfTableExtractor extractor = new PdfTableExtractor(pdf);


            // 循環(huán)遍歷頁(yè)面
            for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
            {
                // 從特定頁(yè)面提取表格
                PdfTable[] tableList = extractor.ExtractTable(pageIndex);

                // 判斷表格列表是否為空
                if (tableList != null && tableList.Length > 0)
                {
                    int tableNumber = 1;
                    // 循環(huán)遍歷列表中的表格
                    foreach (PdfTable table in tableList)
                    {
                        Console.WriteLine($"\n第 {pageIndex + 1} 頁(yè)的第 {tableNumber} 個(gè)表格:");
                        Console.WriteLine("-----------------------------------");

                        // 獲取特定表格的行數(shù)和列數(shù)
                        int row = table.GetRowCount();
                        int column = table.GetColumnCount();

                        // 循環(huán)遍歷行和列
                        for (int i = 0; i < row; i++)
                        {
                            for (int j = 0; j < column; j++)
                            {
                                // 從特定單元格獲取文本
                                string text = table.GetText(i, j);

                                // 將單元格文本打印到控制臺(tái)并帶有分隔符
                                Console.Write($"{text}\t");
                            }
                            // 每行后換行
                            Console.WriteLine();
                        }
                        tableNumber++;
                    }
                }
            }

            // 關(guān)閉文檔
            pdf.Close();
        }
    }
}

C# 將 PDF 表格導(dǎo)出為 CSV

CSV(逗號(hào)分隔值)是表格數(shù)據(jù)的行業(yè)標(biāo)準(zhǔn),與 Excel、Google Sheets 和數(shù)據(jù)庫(kù)兼容。此方法通過(guò)引用單元格和處理特殊字符,將提取的表格格式化為有效的 CSV 文件。

提取 PDF 表格到 CSV 的主要特點(diǎn):

  • StreamWriter:增量寫(xiě)入數(shù)據(jù)到 CSV 文件,減少大型 PDF 文件的內(nèi)存占用。
  • 特殊字符處理:按 CSV 標(biāo)準(zhǔn)轉(zhuǎn)義單元格中的逗號(hào)和雙引號(hào),避免列錯(cuò)位。
  • 工具兼容:生成的 CSV 可直接用 Excel 打開(kāi),無(wú)需手動(dòng)調(diào)整格式,減少后續(xù)操作成本。
  • 編碼兼容:UTF-8 編碼確保中文、特殊符號(hào)在 Excel 中正常顯示(避免打開(kāi)時(shí)亂碼)。
using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Text;

namespace ExtractTableToCsv
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建PdfDocument對(duì)象
            PdfDocument pdf = new PdfDocument();

            // 加載PDF文件
            pdf.LoadFromFile("表格.pdf");

            // 創(chuàng)建StreamWriter對(duì)象以高效寫(xiě)入CSV
            using (StreamWriter csvWriter = new StreamWriter("PDF表格.csv", false, Encoding.UTF8))
            {
                // 創(chuàng)建PdfTableExtractor對(duì)象
                PdfTableExtractor extractor = new PdfTableExtractor(pdf);

                // 循環(huán)遍歷頁(yè)面
                for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
                {
                    // 從特定頁(yè)面提取表格
                    PdfTable[] tableList = extractor.ExtractTable(pageIndex);

                    // 判斷表格列表是否為空
                    if (tableList != null && tableList.Length > 0)
                    {
                        // 循環(huán)遍歷列表中的表格
                        foreach (PdfTable table in tableList)
                        {
                            // 獲取特定表格的行數(shù)和列數(shù)
                            int row = table.GetRowCount();
                            int column = table.GetColumnCount();

                            // 循環(huán)遍歷行
                            for (int i = 0; i < row; i++)
                            {
                                // 創(chuàng)建列表存儲(chǔ)數(shù)據(jù)
                                List<string> rowData = new List<string>();
                                // 循環(huán)遍歷列
                                for (int j = 0; j < column; j++)
                                {
                                    // 從表格單元格檢索文本
                                    string cellText = table.GetText(i, j).Replace("\"", "\"\"");
                                    // 將單元格文本添加到列表并用雙引號(hào)括起來(lái)
                                    rowData.Add($"\"{cellText}\"");
                                }
                                // 用逗號(hào)連接單元格并寫(xiě)入CSV
                                csvWriter.WriteLine(string.Join(",", rowData));
                            }
                        }
                    }
                }
            }
        }
    }
}

到此這篇關(guān)于C#代碼實(shí)現(xiàn)從PDF中提取表格并另存為Excel文件的文章就介紹到這了,更多相關(guān)C#提取PDF表格并存為Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

营山县| 桂阳县| 安西县| 特克斯县| 晋宁县| 罗江县| 太仓市| 东港市| 锡林郭勒盟| 苍溪县| 普洱| 崇明县| 涞水县| 建始县| 六安市| 弥勒县| 江西省| 舟曲县| 高安市| 丹凤县| 图们市| 万安县| 惠水县| 白银市| 乌拉特后旗| 静乐县| 水城县| 阳曲县| 儋州市| 噶尔县| 七台河市| 大兴区| 龙胜| 勃利县| 余庆县| 普安县| 蒙自县| 壤塘县| 靖西县| 甘肃省| 宁夏|