You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python读取Excel多个工作表并转换保存为PDF

问题根源

你现有代码仅能读取第一个工作表,是因为pd.read_excel()的sheet_name参数默认值为0,默认只加载索引位置为0的首个工作表。

实现思路
  • 修改read_excel的sheet_name参数:传入None时会加载文件内所有工作表,返回结构为{工作表名称: 对应DataFrame}的字典;如果只需要加载指定工作表,传入工作表名称组成的列表即可,和你注释中写的写法一致,返回值同样是字典结构。
  • 不要提前创建单个固定画布,遍历读取到的所有工作表,为每个工作表单独生成对应画布和表格,避免多个工作表内容挤在同一页。
  • 复用同一个PdfPages实例,依次将每个工作表生成的画布存入PDF,所有内容写入完成后统一关闭文件,就能得到包含所有工作表内容的多页PDF。
  • 可以根据每个工作表的行数自适应调整画布高度,避免内容挤压、显示不全。
参考实现代码
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

url = "https://exceltesting.xlsx"
# 读取所有工作表返回字典;如果要读指定工作表,替换为sheet_name=['Technologies','Schedule']即可
sheet_dict = pd.read_excel(url, sheet_name=None)

# 用上下文管理器自动处理PDF文件关闭,避免资源泄漏
with PdfPages("output.pdf") as pp:
    for sheet_name, df in sheet_dict.items():
        # 按当前工作表行数自适应画布高度,避免内容挤压
        row_count = len(df)
        fig, ax = plt.subplots(figsize=(12, 0.35 * (row_count + 2)))
        ax.axis('tight')
        ax.axis('off')
        # 添加工作表名称作为当前页标题
        ax.set_title(f"工作表: {sheet_name}", fontsize=14, pad=20)
        # 绘制表格
        ax.table(
            cellText=df.values,
            colLabels=df.columns,
            loc='center',
            cellLoc='center'
        )
        # 将当前工作表内容存入PDF
        pp.savefig(fig, bbox_inches='tight')
        # 关闭当前画布释放内存
        plt.close(fig)
补充说明
  • 代码中画布高度的计算系数0.35可以根据实际使用的字体大小、行高要求调整,保证表格显示清晰无重叠即可。
  • 如果单工作表行数过百,matplotlib绘制表格的性能会明显下降,且单页无法容纳全部内容,此时可以按固定行数拆分DataFrame做分页,或者换用专门的文档处理库实现转换。
  • 如果仅需要导出指定名称的工作表,仅需修改sheet_name参数传入目标表名列表,后续遍历逻辑不需要做任何调整。

内容的提问来源于stack exchange,提问作者user13303557

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:30:10