python 对 excel 选定区域输出为图片的解决方案

想用excel的复制为图片,来搞一些事情

import win32com.client as win32
from PIL import Image, ImageEnhance
from PIL import ImageGrab
import os

def excel_range_to_image_high_res(
    input_path, 
    output_image, 
    sheet_name, 
    range_str='A1:C3',
    zoom=100,          # 设置 Excel 窗口缩放比例(关键参数)
    dpi=300,           # 输出图片的 DPI
    sharpen_factor=2.0 # 锐化强度(1.0为原图,建议2~3)
):
    excel = win32.Dispatch("Excel.Application")
    excel.Visible = False  # 必须隐藏窗口才能设置缩放
    wb = excel.Workbooks.Open(os.path.abspath(input_path))
    ws = wb.Sheets(sheet_name)

    # 关键设置:调整缩放比例以提高分辨率
    excel.ActiveWindow.Zoom = zoom  # 100% 缩放确保像素精确

    # 复制为图片(使用 xlPicture 格式)
    range_obj = ws.Range(range_str)
    range_obj.CopyPicture(Format=2)  # 2 = xlPicture(增强型图元文件,比xlBitmap清晰)

    # 从剪贴板获取图片
    image = ImageGrab.grabclipboard()
    if not image:
        raise ValueError("剪贴板中未找到图片数据")

    # 转换为 RGB 模式并锐化
    image = image.convert("RGB")
    enhancer = ImageEnhance.Sharpness(image)
    image = enhancer.enhance(sharpen_factor)

    # 保存时指定 DPI
    image.save(output_image, dpi=(dpi, dpi))

    # 强制关闭 Excel 进程(避免残留)
    wb.Close(SaveChanges=False)
    excel.Quit()
    # 确保进程退出(防止内存泄漏)
    del excel
    os.system('taskkill /F /IM EXCEL.EXE')  # Windows 强制结束 Excel

# 使用示例(输出高清锐化图片)
excel_range_to_image_high_res(
    input_path="a.xlsx",
    output_image="output_highres.png",
    sheet_name="Sheet1",
    range_str="A1:C3",
    zoom=100,        # 关键!必须设置为 100%
    dpi=1024,         # 输出分辨率
    sharpen_factor=2.5
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值