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

如何在Python中导出高分辨率的Excel图表?

解决Python导出Excel图表分辨率低且布局混乱的问题

方法1:修改Excel全局导出分辨率(直接导出高DPI PNG)

通过设置Excel的DefaultWebOptions.PixelsPerInch参数,让Export方法直接用指定DPI导出图片,无需修改图表本身尺寸,完美保留布局:

from win32com.client import Dispatch

workdir = 'C:/Users/example/'
excel_file = 'filename.xlsx'
output_directory = workdir + 'output/'

app = Dispatch('Excel.Application')
# 设置导出分辨率为300DPI,可根据需求调整
app.DefaultWebOptions.PixelsPerInch = 300
workbook = app.Workbooks.Open(Filename=excel_file)
app.DisplayAlerts = False

i = 1
for sheet in workbook.Worksheets:
    for chartObject in sheet.ChartObjects():
        print(f"{sheet.Name}:{chartObject.Name}")
        chart = chartObject.Chart
        # 直接导出高分辨率PNG
        chart.Export(f"{output_directory}{i}.png", FilterName="PNG")
        i += 1

workbook.Close(SaveChanges=False)
app.Quit()

方法2:先导出PDF再转高分辨率图片(无损布局)

如果需要更高精度的输出,先将图表导出为PDF(矢量格式,完全保留原始布局),再转换为指定DPI的图片。这种方法适合印刷级别的高分辨率需求:

from win32com.client import Dispatch
from pdf2image import convert_from_path
import os

workdir = 'C:/Users/example/'
excel_file = 'filename.xlsx'
output_directory = workdir + 'output/'
target_dpi = 300

# 确保输出目录存在
os.makedirs(output_directory, exist_ok=True)

app = Dispatch('Excel.Application')
workbook = app.Workbooks.Open(Filename=excel_file)
app.DisplayAlerts = False

i = 1
for sheet in workbook.Worksheets:
    for chartObject in sheet.ChartObjects():
        print(f"{sheet.Name}:{chartObject.Name}")
        chart = chartObject.Chart
        # 临时PDF路径
        temp_pdf = f"{output_directory}temp_chart_{i}.pdf"
        # 导出为PDF(xlTypePDF对应数值0)
        chart.ExportAsFixedFormat(0, temp_pdf)
        # 将PDF转换为高分辨率图片
        images = convert_from_path(temp_pdf, dpi=target_dpi)
        for img in images:
            img.save(f"{output_directory}{i}.png", 'PNG')
        # 删除临时PDF文件
        os.remove(temp_pdf)
        i += 1

workbook.Close(SaveChanges=False)
app.Quit()

注意事项

  • 使用方法2需要先安装依赖:pip install pdf2image,同时需要下载poppler工具,并在代码中指定poppler_path参数(如convert_from_path(temp_pdf, dpi=target_dpi, poppler_path=r'C:\path\to\poppler\bin'))。
  • 不要直接修改图表的宽高:调整ChartArea.Width/Height只会放大容器,内部文本、线条的字号和粗细不会同步缩放,导致布局错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:14:54