如何在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
相关产品推荐
相关产品推荐

