직장인

[회사원] 업무 코딩기록 - (Tabula,Openpyxl)Pdf to Excel(표)

cyy1211 2025. 1. 1. 19:03
728x90
반응형
import tabula
from openpyxl import Workbook
from openpyxl.styles import PatternFill
import pandas as pd

# PDF 파일에서 표 추출
tables = tabula.read_pdf('체크리스트(모바일접수용).pdf', pages='all', multiple_tables=True, pandas_options={'header': None})

# 엑셀 파일 생성
wb = Workbook()
sheet = wb.active

# 추출한 표를 엑셀에 추가
row_offset = 0
for table in tables:
    if not table.empty:  # 빈 표는 무시
        for row_index, row in enumerate(table.values):
           for col_index, cell_value in enumerate(row):
               sheet.cell(row=row_index + 1 + row_offset, column=col_index + 1, value=cell_value)
        row_offset += len(table.values)

# B, C, D, E 셀의 내용을 병합하여 H 열에 출력하고 노란색 하이라이트 추가
highlight = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

for row in range(1, sheet.max_row + 1):
    b_value = sheet.cell(row=row, column=2).value
    c_value = sheet.cell(row=row, column=3).value
    d_value = sheet.cell(row=row, column=4).value
    e_value = sheet.cell(row=row, column=5).value
   
    # NaN 값을 공백으로 처리
    b_value = '' if pd.isna(b_value) else b_value
    c_value = '' if pd.isna(c_value) else c_value
    d_value = '' if pd.isna(d_value) else d_value
    e_value = '' if pd.isna(e_value) else e_value
   
    merged_value = f"{b_value} {c_value} {d_value} {e_value}".strip()
    sheet.cell(row=row, column=8, value=merged_value)
    sheet.cell(row=row, column=8).fill = highlight

# 엑셀 파일 저장
wb.save('체크리스트(모바일접수용).xlsx')
print('추출완료')

# 엑셀 F열 파일명 데이터 나누기로 파일명 2개 각 셀로 분할(공백+",")
728x90
반응형