Категория

Как импортировать таблицы из PDF в Excel: практическое руководство

2026-10-14 09:05:27 Jack Du
AI Summarize:
ChatGPT
ChatGPT ✓
Claude ✓
Grok ✓
Perplexity ✓
Quick
Quick
Concise overview
Highlights
Key takeaways
Detailed
Structured explanation
Brief
One sentence summary
Summarize |

Import PDF Tables into Excel

Таблицы PDF часто содержат данные, которые нужно сортировать, фильтровать или анализировать в Excel. Копирование и вставка могут оставить эти данные в одном столбце или нарушить их структуру строк. Встроенная функция Excel Из PDF предлагает более прямой способ импорта распознанных таблиц в ячейки листа.

В этом руководстве объясняется, как импортировать таблицы PDF с помощью Power Query, объединять таблицы на нескольких страницах, сохранять ведущие нули и проверять пробелы в перенесенном тексте. Оно также включает рабочий процесс на Python для извлечения таблиц из папки с PDF-файлами в книги Excel.

Приведенные ниже шаги Power Query используют Excel для Windows с доступным соединителем Из PDF. Начните с текстового PDF; отсканированные страницы требуют обработки OCR, прежде чем можно будет извлечь их табличные данные.

1. Импорт таблиц PDF в Excel с помощью Power Query

Функция Excel Из PDF позволяет определять таблицы в PDF и импортировать их данные в ячейки листа. Откройте таблицу в редакторе Power Query, чтобы просмотреть ее содержимое перед загрузкой.

  1. Откройте Excel и выберите Данные → Получить данные → Из файла → Из PDF. Get data from PDF
  2. Выберите PDF-файл и нажмите Импорт.
  3. В окне Навигатор выберите обнаруженную запись Таблица, чтобы просмотреть ее содержимое. Убедитесь, что она содержит нужные строки и столбцы. Select a detected table
  4. Нажмите Преобразовать данные, чтобы открыть редактор Power Query. Transform data
  5. Проверьте таблицу, затем выберите Главная → Закрыть и загрузить, чтобы загрузить ее на лист Excel. Close and load

Если предварительный просмотр уже корректен и корректировки не требуются, можно нажать Загрузить прямо в Навигаторе.

Для таблиц, требующих объединения или очистки, внесите изменения, описанные в следующих разделах, перед загрузкой итогового результата.

2. Объединение таблиц на нескольких страницах

Power Query может распознать таблицу, занимающую несколько страниц PDF, как одну таблицу или как отдельные таблицы. Проверьте записи в Навигаторе, прежде чем решать, добавлять ли их.

Когда Power Query обнаруживает одну таблицу

Согласованные заголовки, повторяющиеся на каждой странице, помогают Power Query распознать всю таблицу. В Навигаторе она может отображаться как одна запись, например Table001 (Страница 1–3).

Выберите эту запись и проверьте предварительный просмотр. Если она содержит все необходимые записи, нажмите Загрузить или выберите Преобразовать данные, чтобы сначала внести изменения. Операция добавления не требуется.

Когда Power Query обнаруживает отдельные таблицы

Если только первая страница содержит заголовки, Power Query может определить страницы-продолжения как отдельные таблицы с общими именами столбцов, например Column1, Column2 и Column3.

Чтобы объединить их:

  1. В Навигаторе включите Выбрать несколько элементов.
  2. Выберите таблицы, принадлежащие одной таблице, охватывающей несколько страниц, и проверьте их предварительные просмотры. Select the tables belonging to the same cross-page table
  3. Нажмите Преобразовать данные. Каждая выбранная таблица отображается как отдельный запрос в редакторе Power Query. Transform data
  4. Используйте заголовки первой таблицы как образец и переименуйте соответствующие столбцы в таблицах-продолжениях. Например, переименуйте Column1 в Employee ID, а Column2 в Full Name. Rename column names
  5. Перед добавлением убедитесь, что соответствующие имена столбцов точно совпадают, включая пробелы.

Заголовки из одного слова, такие как Department, обычно не нужно вводить заново. Обратите особое внимание на заголовки из нескольких слов, особенно на те, которые переносятся на несколько строк в PDF.

Например, Employee и ID могут отображаться на отдельных строках в исходной ячейке. Навигатор может показать заголовок как Employee ID, даже если его фактическое имя содержит разрыв строки, а не пробел. Переименование столбца другой таблицы в Employee ID с обычным пробелом создаст несоответствие.

Для перенесенного заголовка щелкните столбец правой кнопкой мыши в первом запросе и выберите Переименовать. Выделите все существующее имя и вручную введите однострочное имя, например Employee ID. Используйте это точное имя для соответствующих столбцов в других запросах. Не копируйте исходный перенесенный заголовок, так как он может сохранить скрытый разрыв строки.

Когда имена столбцов станут согласованными:

  1. Выберите один запрос и выберите Главная → Добавить запросы ▼ → Добавить запросы как новый. Append queries as new
  2. Выберите Две таблицы или Три или более таблиц в зависимости от количества запросов. Three or more tables
  3. Выберите таблицы для добавления. Для трех или более таблиц добавьте их в список Таблицы для добавления и расположите их в порядке страниц PDF. Select tables to append
  4. Нажмите OK, чтобы создать объединенный запрос. Combined query

Power Query добавляет данные путем сопоставления имен столбцов, а не их позиций. Если результат содержит два внешне одинаковых столбца или неожиданные значения null, вернитесь к исходным запросам и проверьте их имена на наличие скрытых разрывов строк или лишних пробелов.

Наконец, перед загрузкой в Excel проверьте объединенную таблицу на наличие пропущенных записей, повторяющихся строк заголовков и нежелательного текста нижнего колонтитула страницы.

3. Сохранение ведущих нулей в столбцах идентификаторов

Идентификаторы сотрудников, коды продуктов и подобные идентификаторы могут содержать ведущие нули. Если Power Query назначает этим значениям числовой тип данных, идентификатор, например 00123, может отображаться как 123.

Чтобы сохранить исходный идентификатор:

  1. В редакторе Power Query выберите столбец Employee ID. Select employee id column
  2. Откройте меню Тип данных и измените Целое число на Текст. Change data type
  3. Если появится запрос на замену существующего преобразования типа, выберите Заменить текущий. Replace current
  4. Убедитесь, что значения отображают ведущие нули, например 00123 вместо 123. Check the values

Рассматривайте идентификаторы как текст, даже если они содержат только цифры. Их назначение — идентифицировать записи, а не служить значениями для вычислений.

Внесите это изменение перед загрузкой данных в Excel. Если смена типа не восстанавливает нули, сравните значения с исходным PDF; отсутствующие нули нельзя надежно восстановить, если только идентификаторы не подчиняются известному правилу фиксированной длины.

4. Проверка перенесенного текста и загрузка итоговой таблицы

Текст, который переносится на несколько строк в ячейке PDF, при импорте может быть объединен без пробела. Например, имя, отображаемое как Robert на одной строке и Williams на следующей, может стать RobertWilliams.

Сверьте столбцы, содержащие имена, адреса и описания, с исходным PDF. Исправляйте подтвержденные ошибки интервалов по отдельности. Для конкретного неверного значения выберите столбец и используйте Преобразовать → Заменить значения, чтобы заменить его правильным текстом.

Не применяйте общее правило, вставляющее пробелы везде, где текст был перенесен. Одно слово также может переноситься по строкам: Coordinato вместе с r должно стать Coordinator без пробела.

Перед загрузкой итоговой таблицы убедитесь, что:

  • Количество записей совпадает с исходной таблицей.
  • Записи на границах страниц полны.
  • Столбцы идентификаторов сохраняют ведущие нули.
  • Перенесенный текст имеет правильные интервалы.
  • Числовые столбцы и столбцы дат используют подходящие типы данных.

Затем выберите Главная → Закрыть и загрузить ▼ → Закрыть и загрузить в, выберите Таблица и укажите целевой лист.

Если вы добавили несколько запросов уровня страницы, загружайте только итоговый объединенный запрос как таблицу листа. Для промежуточных запросов установите Только создать подключение, чтобы они оставались доступными для объединенного запроса без создания отдельных таблиц листа.

5. Автоматизация извлечения таблиц PDF в Excel с помощью Python

Power Query предоставляет интерактивный способ импорта и подготовки табличных данных из PDF. Когда нужно многократно обрабатывать несколько PDF-файлов, можно автоматизировать извлечение с помощью Python.

В следующем примере используется Spire.PDF for Python для обнаружения таблиц и чтения содержимого их ячеек, а также openpyxl — библиотека Excel с открытым исходным кодом — для записи извлеченных данных в файлы XLSX. Каждый PDF создает одну книгу, при этом каждая обнаруженная таблица сохраняется на отдельном листе.

Установка библиотек

Установите оба пакета:

pip install Spire.PDF openpyxl

Код пакетного извлечения

Обновите INPUT_FOLDER и OUTPUT_FOLDER в соответствии с вашими каталогами. Скрипт читает PDF-файлы непосредственно из входной папки, проверяет каждую страницу и сохраняет полученные книги в выходную папку.

from pathlib import Path

from spire.pdf import PdfDocument, PdfTableExtractor
from openpyxl import Workbook
from openpyxl.styles import Alignment


INPUT_FOLDER = Path(r"E:\Documents\input")
OUTPUT_FOLDER = Path(r"E:\Documents\output")


def extract_pdf_tables_to_excel(pdf_path, output_path):
    doc = PdfDocument()

    try:
        doc.LoadFromFile(str(pdf_path))
        extractor = PdfTableExtractor(doc)

        workbook = Workbook()
        workbook.remove(workbook.active)
        table_count = 0

        # Extract tables from every page.
        for page_index in range(doc.Pages.Count):
            tables = extractor.ExtractTable(page_index)

            if tables is None:
                continue

            for table_index in range(len(tables)):
                table = tables[table_index]
                row_count = table.GetRowCount()
                column_count = table.GetColumnCount()

                if row_count == 0 or column_count == 0:
                    continue

                sheet = workbook.create_sheet(
                    title=f"Page{page_index + 1}_Table{table_index + 1}"
                )

                for row_index in range(row_count):
                    for column_index in range(column_count):
                        text = table.GetText(row_index, column_index)

                        cell = sheet.cell(
                            row=row_index + 1,
                            column=column_index + 1
                        )

                        # Preserve extracted values as literal text.
                        cell.value = text if text is not None else ""
                        cell.data_type = "s"
                        cell.number_format = "@"
                        cell.alignment = Alignment(
                            vertical="top",
                            wrap_text=True
                        )

                for column_cells in sheet.columns:
                    column_letter = column_cells[0].column_letter
                    sheet.column_dimensions[column_letter].width = 22

                table_count += 1

        if table_count == 0:
            print(f"Skipped: {pdf_path.name} — no tables detected.")
            return

        workbook.save(str(output_path))
        print(
            f"Saved: {output_path.name} "
            f"({table_count} tables)"
        )

    finally:
        doc.Close()


def main():
    if not INPUT_FOLDER.is_dir():
        raise FileNotFoundError(
            f"Input folder not found: {INPUT_FOLDER}"
        )

    OUTPUT_FOLDER.mkdir(parents=True, exist_ok=True)

    pdf_files = sorted(
        (
            path for path in INPUT_FOLDER.iterdir()
            if path.is_file() and path.suffix.lower() == ".pdf"
        ),
        key=lambda path: path.name.lower()
    )

    if not pdf_files:
        print("No PDF files found in the input folder.")
        return

    for pdf_path in pdf_files:
        output_path = OUTPUT_FOLDER / f"{pdf_path.stem}.xlsx"

        try:
            extract_pdf_tables_to_excel(pdf_path, output_path)
        except Exception as error:
            print(f"Failed: {pdf_path.name} — {error}")


if __name__ == "__main__":
    main()

Скрипт вызывает ExtractTable() для каждой страницы PDF, затем читает каждую обнаруженную таблицу с помощью GetRowCount(), GetColumnCount() и GetText(). Извлеченные ячейки записываются в соответствующие строки и столбцы нового листа.

Файлы без обнаруженных таблиц пропускаются. Если обработка одного PDF завершается неудачно, скрипт сообщает об ошибке и продолжает работу с остальными файлами.

Вам также может понравиться: Извлечение таблиц из PDF с помощью Python

Вывод и замечания

Automate PDF Table Extraction

PDF-файл с именем report.pdf создает книгу с именем report.xlsx. Имена листов указывают исходную страницу и таблицу, например Page1_Table1, Page1_Table2 и Page2_Table1.

Все извлеченные значения записываются как текст. Это сохраняет ведущие нули, присутствующие в извлеченном содержимом, например 00123, и предотвращает интерпретацию текста, начинающегося с =, как формулы Excel. Суммы и даты также остаются текстом и могут потребовать преобразования перед вычислениями или анализом на основе дат.

В этом примере экспортируются данные таблицы, а не воспроизводится исходный внешний вид PDF. Он не воссоздает исходные шрифты, границы или форматирование объединенных ячеек и не исправляет ошибки извлечения, такие как отсутствующие пробелы. Если таблица, охватывающая несколько страниц, обнаруживается как отдельные таблицы, эти части сохраняются на отдельных листах, а не объединяются автоматически.

Перед использованием данных сверьте созданную книгу с исходным PDF. Повторный запуск скрипта перезаписывает существующие XLSX-файлы с теми же именами в выходной папке.

6. Часто задаваемые вопросы

Почему я не могу найти параметр «Из PDF» в Excel?

Доступные соединители зависят от версии и платформы Excel. Проверьте Данные → Получить данные → Из файла на наличие Из PDF. Если его нет, проверьте, поддерживает ли ваша установка соединитель PDF. Шаги импорта Power Query в этом руководстве предполагают, что этот параметр доступен.

Можно ли импортировать таблицу из отсканированного PDF с помощью этих методов?

Отсканированный PDF хранит содержимое страниц в виде изображений. Показанные здесь рабочие процессы не включают OCR, поэтому они предназначены для текстовых PDF. Для отсканированных документов используйте инструмент OCR, который может распознавать структуру таблиц и экспортировать структурированные данные, затем сверьте извлеченные значения с источником.

Будет ли импортированная таблица Excel выглядеть точно так же, как PDF?

Эти методы сосредоточены на извлечении данных ячеек для использования в Excel. Они не гарантируют воспроизведение шрифтов, цветов, границ, ширины столбцов или объединенных ячеек PDF. Примените форматирование Excel после импорта, если вам нужен определенный внешний вид.

Можно ли обновить таблицу Power Query при изменении PDF?

Да. Если исходный PDF обновлен по тому же пути к файлу, используйте Данные → Обновить все, чтобы повторно запустить запрос. После этого проверьте результат, особенно если изменилось количество страниц, обнаруженных таблиц или структура столбцов. Такие изменения могут потребовать корректировки запроса.

7. Заключение

Импорт таблиц PDF в Excel включает не только обнаружение строк и столбцов. Power Query предоставляет практичную отправную точку, но следующие шаги зависят от результата: таблица, охватывающая несколько страниц, может быть готова к загрузке как одна таблица, или ее разделы могут нуждаться в согласовании имен столбцов перед добавлением. Ведущие нули и пробелы в перенесенном тексте также заслуживают внимания, поскольку внешне чистая таблица все еще может содержать измененные значения.

Для повторяющихся задач рабочий процесс на Python распространяет этот процесс на папку с PDF-файлами, сохраняя каждый файл как книгу с отдельными листами для обнаруженных таблиц. Выберите рабочий процесс, подходящий для вашей нагрузки, затем сравните вывод с исходным PDF — особенно идентификаторы, многострочный текст и записи на границах страниц. Эти проверки помогают убедиться, что импортированные данные готовы к фильтрации, вычислениям и дальнейшему анализу.

См. также