Python在Excel中插入图表的完整实现步骤

Mason
Mason
发布时间:2026-10-11| 3人浏览过
原创

将分析结果直接输出为带图表的Excel报告是数据分析的常见需求。本文演示如何借助Python生态中的Matplotlib负责图形渲染,OpenPyXL负责表格修改,通过‘生成图片→定位单元格→嵌入保存’的流程,实现图表自动插入到指定工作表的功能。

核心目标与前置准备

本方案的目标是接收一份结构化数据(pandas DataFrame),自动生成对应主题的统计图,并将该图片无缝嵌入已有的.xlsx文件或新建的工作簿中。操作前需确保本地已配置好 Python 运行环境,并安装以下核心依赖:

  • pandas:用于读取与整理业务数据源。
  • matplotlib:负责绘制各类静态统计图表。
  • openpyxl:专门处理 .xlsx 格式文件的读写与对象修改。
  • Pillow:图像处理底层支撑库(OpenPyXL 加载图片时需依赖)。

安装命令如下:

pip install pandas matplotlib openpyxl Pillow

第1步:提取数据并生成图表图片

首先从 DataFrame 中提取分类轴标签与数值序列,利用 Matplotlib 绘制图表并保存为本地临时图片。此步骤的关键在于设置合适的画布尺寸、分辨率以及中文字体,以保证最终输出清晰且不出现乱码。

import pandas as pd
import matplotlib.pyplot as plt

def generate_chart_plot(df):
    # 获取列名作为X轴分类,展平数据作为Y轴高度
    categories = df.columns.tolist()
    values = df.iloc[0].tolist()  # 以第一行数据为例,实际可按需调整索引
    
    # 配置中文字体(兼容Windows,macOS/Linux需指向本地ttf路径)
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
    plt.rcParams['axes.unicode_minus'] = False
    
    fig, ax = plt.subplots(figsize=(8, 4))
    bars = ax.bar(categories, values, color=['#1f77b4', '#ff7f0e'])
    ax.set_title('会员数量对比')
    ax.set_ylabel('数量')
    
    # 柱顶添加具体数值标注
    for bar in bars:
        height = bar.get_height()
        ax.text(bar.get_x() + bar.get_width() / 2., height,
                f'{int(height)}', ha='center', va='bottom')
    
    plt.tight_layout()
    chart_path = 'membership_chart.png'
    plt.savefig(chart_path, dpi=300)
    plt.close()
    return chart_path

第2步:通过 OpenPyXL 嵌入图片至指定工作表

图片生成后,使用 OpenPyXL 加载目标 Excel 文件。若用户需要精确控制插入位置,可指定目标工作表名称;若该工作表不存在,则按需创建。随后实例化 Image 对象,设定像素宽高后调用 add_image 方法进行锚点定位。

from openpyxl import load_workbook, Workbook
from openpyxl.drawing.image import Image

def insert_chart_to_excel(excel_path, chart_image_path, sheet_name='Sheet1'):
    try:
        wb = load_workbook(excel_path)
    except FileNotFoundError:
        print(f'文件 {excel_path} 不存在,已为您创建新工作簿。')
        wb = Workbook()
        if sheet_name not in wb.sheetnames:
            wb.create_sheet(sheet_name)
        ws = wb[sheet_name]
    else:
        if sheet_name in wb.sheetnames:
            ws = wb[sheet_name]
        else:
            ws = wb.create_sheet(sheet_name)

    # 加载图片并约束尺寸
    img = Image(chart_image_path)
    img.width = 800  # 根据实际排版需求调整宽度
    img.height = 450 # 保持比例缩放
    
    # 将图片插入 D2 单元格,默认左上角对齐
    ws.add_image(img, 'D2')
    wb.save(excel_path)
    print('图表已成功嵌入目标 Excel 文件。')

第3步:整合调用与实际执行

将上述两段逻辑组合后,即可完成端到端的数据清洗、绘图与导出流程。以下为完整调用示例:

# 模拟数据源
data = {'月份': ['1月', '2月', '3月'], '销售额': [2500, 3200, 2800]}
df_data = pd.DataFrame(data)

# 1. 生成图表
chart_p = generate_chart_plot(df_data)

# 2. 插入Excel
insert_chart_to_excel('data_report.xlsx', chart_p, 'Sheet1')

完成状态校验与常见排错

脚本执行完毕后,请直接打开目标 .xlsx 文件。若看到图片准确悬浮于 D2 单元格区域,且无报错堆栈输出,即表示操作成功。在实际落地过程中,常遇到以下情况需要排查:

  1. 中文显示为方块或问号:系统缺失黑体或等效字体。Linux/macOS 服务器环境建议在代码中使用 FontProperties 显式指定绝对路径的 .ttf 文件,例如:font = FontProperties(fname='/usr/share/fonts/simhei.ttf')。
  2. 文件被锁定无法保存:检查目标 Excel 是否正被 WPS 或 Office 进程独占打开。关闭占用程序后再运行脚本即可。
  3. 图片边缘留白过多:调整 savefig(bbox_inches='tight') 参数或减小 plt.figure(figsize) 的尺寸,避免图片撑破表格布局。

简要总结

通过标准化调用 Matplotlib 的图像渲染能力与 OpenPyXL 的文档编辑接口,可将繁杂的业务报表自动化包装为直观的可交付成果。掌握参数调优与路径管理后,该方法可直接迁移至月度经营分析、供应链监控等多个办公自动化场景。

以上就是Python在Excel中插入图表的详细内容,更多关于Python数据可视化与办公自动化处理的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。