
PDF 표에는 Excel에서 정렬, 필터링 또는 분석해야 하는 데이터가 포함되는 경우가 많습니다. 복사하여 붙여넣으면 해당 데이터가 단일 열에 남거나 행 구조가 깨질 수 있습니다. Excel의 기본 제공 PDF에서 기능은 감지된 표를 워크시트 셀로 가져오는 더 직접적인 방법을 제공합니다.
이 가이드에서는 Power Query로 PDF 표를 가져오고, 여러 페이지에 걸친 표를 결합하고, 선행 0을 유지하고, 줄 바꿈된 텍스트의 공백을 확인하는 방법을 설명합니다. 또한 PDF 파일 폴더에서 Excel 통합 문서로 표를 추출하는 Python 워크플로도 포함합니다.
아래의 Power Query 단계는 PDF에서 커넥터를 사용할 수 있는 Windows용 Excel을 사용합니다. 텍스트 기반 PDF로 시작하세요. 스캔한 페이지는 표 데이터를 추출하기 전에 OCR 워크플로가 필요합니다.
- Power Query를 사용하여 PDF 표를 Excel로 가져오기
- 여러 페이지에 걸친 표 결합
- ID 열의 선행 0 유지
- 줄 바꿈된 텍스트 확인 및 최종 표 로드
- Python으로 PDF 표를 Excel로 추출 자동화
- 자주 묻는 질문
- 결론
1. Power Query를 사용하여 PDF 표를 Excel로 가져오기
Excel의 PDF에서 기능을 사용하면 PDF에서 표를 식별하고 해당 데이터를 워크시트 셀로 가져올 수 있습니다. 로드하기 전에 Power Query 편집기에서 표를 열어 내용을 검토하세요.
- Excel을 열고 데이터 → 데이터 가져오기 → 파일에서 → PDF에서를 선택합니다.
- PDF 파일을 선택하고 가져오기를 클릭합니다.
-
탐색기 창에서 감지된 표 항목을 선택하여 내용을 미리 봅니다. 필요한 행과 열이 포함되어 있는지 확인하세요.
-
데이터 변환을 클릭하여 Power Query 편집기를 엽니다.
- 표를 검토한 다음 홈 → 닫기 및 로드를 선택하여 Excel 워크시트에 로드합니다.
미리 보기가 이미 올바르고 조정이 필요하지 않다면 탐색기에서 바로 로드를 클릭할 수 있습니다.
결합하거나 정리해야 하는 표의 경우 최종 결과를 로드하기 전에 다음 섹션에 설명된 조정을 수행하세요.
2. 여러 페이지에 걸친 표 결합
Power Query는 여러 PDF 페이지에 걸친 표를 하나의 표로 인식하거나 별도의 표로 인식할 수 있습니다. 추가할지 결정하기 전에 탐색기의 항목을 확인하세요.
Power Query가 하나의 표를 감지하는 경우
각 페이지에 반복되는 일관된 머리글은 Power Query가 전체 표를 인식하는 데 도움이 될 수 있습니다. 탐색기에서는 Table001 (페이지 1–3)과 같은 단일 항목으로 표시될 수 있습니다.
해당 항목을 선택하고 미리 보기를 확인합니다. 필요한 모든 레코드가 포함되어 있으면 로드를 클릭하거나 데이터 변환을 선택하여 먼저 조정합니다. 추가 작업은 필요하지 않습니다.
Power Query가 별도의 표를 감지하는 경우
첫 페이지에만 머리글이 있는 경우 Power Query는 연속 페이지를 Column1, Column2, Column3과 같은 일반 열 이름을 가진 별도의 표로 감지할 수 있습니다.
이들을 결합하려면:
- 탐색기에서 여러 항목 선택을 활성화합니다.
- 동일한 페이지에 걸친 표에 속하는 표들을 선택하고 미리 보기를 확인합니다.
-
데이터 변환을 클릭합니다. 선택한 각 표는 Power Query 편집기에 별도의 쿼리로 표시됩니다.
- 첫 번째 표의 머리글을 참조로 사용하고 연속 표에서 해당 열의 이름을 바꿉니다. 예를 들어
Column1의 이름을Employee ID로,Column2의 이름을Full Name으로 바꿉니다.
- 추가하기 전에 해당 열 이름이 공백을 포함하여 정확히 일치하는지 확인합니다.
Department와 같은 단일 단어 머리글은 일반적으로 다시 입력할 필요가 없습니다. 여러 단어로 된 머리글, 특히 PDF에서 여러 줄로 줄 바꿈되는 머리글에 더 주의하세요.
예를 들어 Employee와 ID가 원본 셀에서 별도 줄에 나타날 수 있습니다. 탐색기에서는 실제 이름에 공백이 아닌 줄 바꿈이 포함되어 있더라도 머리글을 Employee ID로 표시할 수 있습니다. 그러면 다른 표의 열 이름을 일반 공백이 있는 Employee ID로 바꾸면 불일치가 발생합니다.
줄 바꿈된 머리글의 경우 첫 번째 쿼리에서 열을 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 선택합니다. 기존 이름 전체를 선택하고 Employee ID와 같이 한 줄 이름을 직접 입력합니다. 다른 쿼리의 해당 열에도 정확히 같은 이름을 사용하세요. 원래 줄 바꿈된 머리글을 복사하지 마세요. 숨겨진 줄 바꿈이 유지될 수 있습니다.
열 이름이 일관되면:
- 쿼리 하나를 선택하고 홈 → 쿼리 추가 ▼ → 새 쿼리로 추가를 선택합니다.
- 쿼리 수에 따라 두 개의 표 또는 세 개 이상의 표를 선택합니다.
- 추가할 표를 선택합니다. 표가 세 개 이상인 경우 추가할 표 목록에 추가하고 PDF 페이지 순서대로 정렬합니다.
-
확인을 클릭하여 결합된 쿼리를 만듭니다.
Power Query는 열 위치가 아니라 열 이름을 일치시켜 데이터를 추가합니다. 결과에 겉보기에 동일한 열 두 개나 예기치 않은 null 값이 포함되어 있으면 원본 쿼리로 돌아가 이름에 숨겨진 줄 바꿈이나 추가 공백이 있는지 확인하세요.
마지막으로 Excel로 로드하기 전에 결합된 표에서 누락된 레코드, 반복된 머리글 행, 원치 않는 페이지 바닥글 텍스트가 있는지 검토하세요.
3. ID 열의 선행 0 유지
직원 ID, 제품 코드 및 유사한 식별자에는 선행 0이 포함될 수 있습니다. Power Query가 이러한 값에 숫자 데이터 형식을 할당하면 00123과 같은 ID가 123으로 표시될 수 있습니다.
원래 ID를 유지하려면:
- Power Query 편집기에서 Employee ID 열을 선택합니다.
-
데이터 형식 메뉴를 열고 정수를 텍스트로 변경합니다.
- 기존 형식 변환을 바꾸라는 메시지가 표시되면 현재 항목 바꾸기를 선택합니다.
- 값에 선행 0이 표시되는지 확인합니다. 예를 들어
123대신00123입니다.
식별자는 숫자만 포함하더라도 텍스트로 처리하세요. 식별자의 목적은 계산용 값이 아니라 레코드를 식별하는 것입니다.
Excel에 데이터를 로드하기 전에 이 조정을 수행하세요. 형식을 변경해도 0이 복원되지 않으면 값을 원본 PDF와 비교하세요. 식별자가 알려진 고정 길이 규칙을 따르지 않는 한 누락된 0을 안정적으로 유추할 수 없습니다.
4. 줄 바꿈된 텍스트 확인 및 최종 표 로드
PDF 셀에서 여러 줄로 줄 바꿈된 텍스트는 가져오는 동안 공백 없이 결합될 수 있습니다. 예를 들어 한 줄에 Robert, 다음 줄에 Williams로 표시된 이름이 RobertWilliams가 될 수 있습니다.
이름, 주소, 설명이 포함된 열을 원본 PDF와 비교하세요. 확인된 간격 오류는 개별적으로 수정하세요. 특정 잘못된 값의 경우 열을 선택하고 변환 → 값 바꾸기를 사용하여 올바른 텍스트로 바꿉니다.
텍스트가 줄 바꿈된 모든 곳에 공백을 삽입하는 일반 규칙을 적용하지 마세요. 단일 단어도 줄에 걸쳐 줄 바꿈될 수 있습니다. Coordinato 다음에 r이 오는 경우 공백 없이 Coordinator가 되어야 합니다.
최종 표를 로드하기 전에 다음을 확인하세요:
- 레코드 수가 원본 표와 일치합니다.
- 페이지 경계의 레코드가 완전합니다.
- ID 열이 선행 0을 유지합니다.
- 줄 바꿈된 텍스트의 간격이 올바릅니다.
- 숫자 및 날짜 열이 적절한 데이터 형식을 사용합니다.
그런 다음 홈 → 닫기 및 로드 ▼ → 닫기 및 로드 대상을 선택하고 표를 선택한 후 대상 워크시트를 선택합니다.
여러 페이지 수준 쿼리를 추가한 경우 최종 결합된 쿼리만 워크시트 표로 로드하세요. 중간 쿼리를 연결만 만들기로 설정하면 별도의 워크시트 표를 만들지 않고도 결합된 쿼리에서 계속 사용할 수 있습니다.
5. Python으로 PDF 표를 Excel로 추출 자동화
Power Query는 PDF 표 데이터를 가져오고 준비하는 대화형 방법을 제공합니다. 여러 PDF 파일을 반복적으로 처리해야 할 때 Python으로 추출을 자동화할 수 있습니다.
다음 예제에서는 Spire.PDF for Python을 사용하여 표를 감지하고 셀 내용을 읽으며, 오픈 소스 Excel 라이브러리인 openpyxl을 사용하여 추출된 데이터를 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()
스크립트는 각 PDF 페이지에 대해 ExtractTable()을 호출한 다음 GetRowCount(), GetColumnCount(), GetText()로 감지된 각 표를 읽습니다. 추출된 셀은 새 워크시트의 해당 행과 열에 기록됩니다.
감지된 표가 없는 파일은 건너뜁니다. PDF 하나를 처리하지 못하면 스크립트가 오류를 보고하고 나머지 파일을 계속 처리합니다.
관련 글: Python을 사용하여 PDF에서 표 추출
출력 및 고려 사항

report.pdf라는 PDF는 report.xlsx라는 통합 문서를 생성합니다. 워크시트 이름은 원본 페이지와 표를 식별하며, 예를 들어 Page1_Table1, Page1_Table2, Page2_Table1과 같습니다.
추출된 모든 값은 텍스트로 기록됩니다. 이렇게 하면 00123과 같이 추출된 내용에 있는 선행 0이 유지되고 =로 시작하는 텍스트가 Excel 수식으로 해석되는 것을 방지할 수 있습니다. 금액과 날짜도 텍스트로 남으므로 계산이나 날짜 기반 분석 전에 변환이 필요할 수 있습니다.
이 예제는 PDF의 원래 모양을 재현하는 것이 아니라 표 데이터를 내보냅니다. 원본 글꼴, 테두리 또는 병합된 셀 서식을 다시 만들지 않으며 누락된 공백과 같은 추출 오류를 수정하지도 않습니다. 페이지에 걸친 표가 별도의 표로 감지되면 해당 부분은 자동으로 결합되지 않고 별도의 워크시트에 저장됩니다.
데이터를 사용하기 전에 생성된 통합 문서를 원본 PDF와 비교하여 검토하세요. 스크립트를 다시 실행하면 출력 폴더에서 이름이 같은 기존 XLSX 파일을 덮어씁니다.
6. 자주 묻는 질문
Excel에서 PDF에서 옵션을 찾을 수 없는 이유는 무엇인가요?
사용 가능한 커넥터는 Excel 버전과 플랫폼에 따라 다릅니다. 데이터 → 데이터 가져오기 → 파일에서에서 PDF에서를 확인하세요. 없으면 설치에서 PDF 커넥터를 지원하는지 확인하세요. 이 가이드의 Power Query 가져오기 단계는 해당 옵션을 사용할 수 있다고 가정합니다.
이러한 방법으로 스캔한 PDF 표를 가져올 수 있나요?
스캔한 PDF는 페이지 내용을 이미지로 저장합니다. 여기에 표시된 워크플로에는 OCR이 포함되지 않으므로 텍스트 기반 PDF용입니다. 스캔한 문서의 경우 표 구조를 인식하고 구조화된 데이터를 내보낼 수 있는 OCR 도구를 사용한 다음 추출된 값을 원본과 비교하세요.
가져온 Excel 표가 PDF와 똑같이 보이나요?
이러한 방법은 Excel에서 사용할 셀 데이터를 추출하는 데 중점을 둡니다. PDF의 글꼴, 색, 테두리, 열 너비 또는 병합된 셀이 재현된다고 보장하지 않습니다. 특정 모양이 필요하면 가져온 후 Excel 서식을 적용하세요.
PDF가 변경되면 Power Query 표를 새로 고칠 수 있나요?
예. 원본 PDF가 같은 파일 경로에서 업데이트되면 데이터 → 모두 새로 고침을 사용하여 쿼리를 다시 실행합니다. 이후 결과를 검토하세요. 특히 페이지 수, 감지된 표 수 또는 열 구조가 변경된 경우 더욱 그렇습니다. 이러한 변경에는 쿼리 조정이 필요할 수 있습니다.
7. 결론
PDF 표를 Excel로 가져오기는 행과 열을 감지하는 것 이상을 포함합니다. Power Query는 실용적인 시작점을 제공하지만 다음 단계는 결과에 따라 달라집니다. 페이지에 걸친 표는 하나의 표로 로드할 준비가 되어 있을 수도 있고, 해당 섹션을 추가하기 전에 열 이름을 일치시켜야 할 수도 있습니다. 선행 0과 줄 바꿈된 텍스트의 공백도 주의해야 합니다. 겉보기에 깔끔한 표에도 변경된 값이 포함될 수 있기 때문입니다.
반복 작업의 경우 Python 워크플로가 이 프로세스를 PDF 폴더로 확장하여 각 파일을 감지된 표에 대한 별도 워크시트가 있는 통합 문서로 저장합니다. 작업량에 맞는 워크플로를 선택한 다음 출력을 원본 PDF와 비교하세요. 특히 식별자, 여러 줄 텍스트, 페이지 경계의 레코드를 확인하세요. 이러한 확인을 통해 가져온 데이터가 필터링, 계산 및 추가 분석에 사용할 준비가 되었는지 확인할 수 있습니다.