Python中如何将PDF内容写入Excel文件?

试了一下。感觉不像啊。 只能插入图片。


Python中如何将PDF内容写入Excel文件?
13 回复
import pdfplumber
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

def pdf_to_excel(pdf_path, excel_path):
    """
    将PDF表格数据提取到Excel文件
    """
    all_tables = []
    
    with pdfplumber.open(pdf_path) as pdf:
        for page_num, page in enumerate(pdf.pages):
            # 提取当前页的所有表格
            tables = page.extract_tables()
            
            for table_num, table in enumerate(tables):
                if table:  # 确保表格不为空
                    # 将表格转换为DataFrame
                    df = pd.DataFrame(table[1:], columns=table[0])
                    # 添加来源信息(可选)
                    df['来源页'] = page_num + 1
                    all_tables.append(df)
    
    if not all_tables:
        print("未在PDF中找到表格数据")
        return
    
    # 合并所有表格
    combined_df = pd.concat(all_tables, ignore_index=True)
    
    # 写入Excel文件
    with pd.ExcelWriter(excel_path, engine='openpyxl') as writer:
        combined_df.to_excel(writer, sheet_name='PDF数据', index=False)
        
        # 自动调整列宽
        worksheet = writer.sheets['PDF数据']
        for column in worksheet.columns:
            max_length = 0
            column_letter = column[0].column_letter
            for cell in column:
                try:
                    if len(str(cell.value)) > max_length:
                        max_length = len(str(cell.value))
                except:
                    pass
            adjusted_width = min(max_length + 2, 50)
            worksheet.column_dimensions[column_letter].width = adjusted_width
    
    print(f"数据已成功写入 {excel_path}")
    print(f"共提取 {len(all_tables)} 个表格,{len(combined_df)} 行数据")

# 使用示例
if __name__ == "__main__":
    # 指定PDF文件路径和输出的Excel文件路径
    pdf_file = "input.pdf"  # 替换为你的PDF文件路径
    excel_file = "output.xlsx"  # 输出的Excel文件名
    
    pdf_to_excel(pdf_file, excel_file)

安装依赖:

pip install pdfplumber pandas openpyxl

代码说明:

  1. pdfplumber:专门用于PDF文本和表格提取的库,比PyPDF2更适合表格数据
  2. pandas:数据处理,将提取的表格转换为DataFrame
  3. openpyxl:生成Excel文件并调整列宽

功能特点:

  • 自动提取PDF中所有页面的表格
  • 保留表格的列标题
  • 添加来源页码便于追溯
  • 自动调整Excel列宽
  • 处理多表格合并

使用提示:

  • 如果PDF是扫描件(图片格式),需要先用OCR工具转换
  • 复杂表格可能需要调整pdfplumber的提取参数
  • 确保PDF中的表格是标准格式,手绘表格可能无法识别

一句话建议: 用pdfplumber提取表格数据再用pandas写入Excel最可靠。

难道得用 vba ???

等待 v 友们的指导。。。。。。。。。。

这应该是个 OLE 对象?

#5 好像是。但不好插入吧

COM 接口可能可以实现?。

#7 好像蛮复杂的

恩 c++的接口,不知道 python 有没有方便的绑定可以用。。你可以找找 除了这个还想不到其他的好办法,OOXML 等 不知道对于这个支持不支持

#10 估计够呛

xlwt ?

回到顶部