python截图excel报错 未调用_python 对excel进行截图

工作中需要对excel的单元格区域进行截图,以前是调用vba进行(走了很多弯路,虽然能实现,但比较low),后来逐步发现python的win32com与vba师出同门,很多方法操作都是类似的。

可以对代码进行优化。

解决方案如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Datetime:2018/9/16 11:45

# Author:Xzs

from win32com.client import Dispatch, DispatchEx

import pythoncom

from PIL import ImageGrab, Image

import uuid

# screen_area——类似格式"A1:J10"

def excel_catch_screen(filename, sheetname, screen_area, img_name=False):

""" 对excel的表格区域进行截图——用例:excel_catch_screen(ur"D:\Desktop\123.xlsx", "Sheet1", "A1:J10")"""

pythoncom.CoInitialize() # excel多线程相关

excel = DispatchEx("Excel.Application") # 启动excel

excel.Visible = True # 可视化

excel.DisplayAlerts = False # 是否显示警告

wb = excel.Workbooks.Open(filename) # 打开excel

ws = wb.Sheets(sheetname) # 选择sheet

ws.Range(screen_area).CopyPicture() # 复制图片区域

ws.Paste() # 粘贴 ws.Paste(ws.Range('B1')) # 将图片移动到具体位置

name = str(uuid.uuid4()) # 重命名唯一值

new_shape_name = name[:6]

excel.Selection.ShapeRange.Name = new_shape_name # 将刚刚选择的Shape重命名,避免与已有图片混淆

ws.Shapes(new_shape_name).Copy() # 选择图片

img = ImageGrab.grabclipboard() # 获取剪贴板的图片数据

if not img_name:

img_name = name + ".PNG"

img.save(img_name) # 保存图片

wb.Close(SaveChanges=0) # 关闭工作薄,不保存

excel.Quit() # 退出excel

pythoncom.CoUninitialize()

if __name__ == '__main__':

pass

# excel_catch_screen(ur"D:\Desktop\123.xlsx", "Sheet1", "A1:J10")

ps有个美眉用了后发现截图出现叠字,一顿操作后来发现是office2010的版本问题,更换后office2016后解决。有同样问题的可参考

vba实现:

Sub catch_screen()

Dim path

path = Range("A1").Value

Workbooks.Open Filename:=path, UpdateLinks:=False

Sheets(2).Select

Range("A38:T67").Select

Selection.Copy

Set shp = ActiveSheet.Pictures.Paste

shp.CopyPicture

Name = Split(ThisWorkbook.Name, ".xlsx")(0)

With ActiveSheet.ChartObjects.Add(0, 0, shp.Width, shp.Height).Chart

.Parent.Select

.Paste

.Export ThisWorkbook.path & "\\" & Name & "-" & ActiveSheet.Name & ".JPEG"

.Parent.Delete

End With

shp.Delete

ActiveWorkbook.Close (SaveChanges = False)

End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值