想用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
)