Python 之 Excel 截图
Python 之 Excel 截图
win32 截图
# win32 截图
def winPic(excel_path):
# file='截图.xlsx'
# file_name = os.path.abspath(file) # 把相对路径转成绝对路径
pythoncom.CoInitialize() # 开启多线程
# 创建Excel对象
excel = DispatchEx('excel.application')
excel.visible = False # 不显示Excel
excel.DisplayAlerts = 0 # 关闭系统警告(保存时不会弹出窗口)
# excel.ScreenUpdating = 1 # 关闭屏幕刷新
workbook = excel.workbooks.Open(excel_path) # 打开Excel文件
sheet = workbook.worksheets['截图']
img_name = '截图'
screen_area = sheet.UsedRange # 有内容的区域
screen_area.CopyPicture() # 复制图片区域
sheet.Paste() # 粘贴
excel.Selection.ShapeRange.Name = img_name # 将刚刚选择的Shape重命名,避免与已有图片混淆
sheet.Shapes(img_name).Copy() # 选择图片
img = ImageGrab.grabclipboard() # 获取剪贴板的图片数据
# time.sleep(2)
print(img) # 可以弄个报错
img.save(img_name + ".png")
workbook.Close(False) # 关闭Excel文件,不保存
excel.Quit() # 退出Excel
pythoncom.CoUninitialize() # 关闭多线程
Excel xlwings制作图片
# Excel xlwings制作图片
def xlwingsPic(excel_path, name):
print('分析数据:'+name)
app = xw.App(visible=True, add_book=False)
# 1. 使用 xlwings 的 读取 path 文件 启动
wb = app.books.open(excel_path)
# 2. 读取 sheet
sht = wb.sheets[0]
# 3. 获取 行与列
nrow = sht.used_range.last_cell.row
ncol = sht.used_range.last_cell.column
# 自动调整单元格大小。
sht.autofit()
# 合并‘合计’单元格
Brow = 'C' + str(nrow)
Hrow = 'I' + str(nrow)
mer = Brow+':'+Hrow
sht.range(mer).api.Merge()
heji = sht.range(Hrow)
# 4. 获取有内容的 range
range_val = sht.range(
(1, 3), # 获取 第一行 第一列
(nrow, ncol-1) # 获取 第 nrow 行 第 ncol 列
)
# 设置背景色
range_val.color = (255, 255, 255)
# 设置单元格的对齐方式
range_val.api.HorizontalAlignment = -4108 # -4108 水平居中。 -4131 靠左,-4152 靠右。
# range_val.api.VerticalAlignment = -4130 # -4108 垂直居中(默认)。 -4160 靠上,-4107 靠下, -4130 自动换行对齐。
# ‘合计’右对齐
heji.api.HorizontalAlignment = -4152
# Borders(9) 底部边框,LineStyle = 1 直线。2 虚线。 5 双点划线。4 点划线。
range_val.api.Borders(9).LineStyle = 1
range_val.api.Borders(9).Weight = 2 # 设置边框粗细。
# Borders(7) 左边框
range_val.api.Borders(7).LineStyle = 1
range_val.api.Borders(7).Weight = 2
# Borders(8) 顶部框
range_val.api.Borders(8).LineStyle = 1
range_val.api.Borders(8).Weight = 2
# Borders(10) 右边框
range_val.api.Borders(10).LineStyle = 1
range_val.api.Borders(8).Weight = 2
# 区域的单元格,内部边框
# # Borders(11) 内部垂直边线。
range_val.api.Borders(11).LineStyle = 1
range_val.api.Borders(11).Weight = 2
# # Borders(12) 内部水平边线。
range_val.api.Borders(12).LineStyle = 1
range_val.api.Borders(12).Weight = 2
# 5. 复制图片区域
range_val.api.CopyPicture()
time.sleep(0.5)
# 6. 粘贴
sht.api.Paste()
pic = sht.pictures[0] # 当前图片
pic.api.Copy()
time.sleep(0.5)
# 获取剪贴板的图片数据
im = ImageGrab.grabclipboard()
time.sleep(5)
riqi = str(time.strftime("%Y-%m-%d", time.localtime()))
ImageAdd = 'D:\\AutoSend\\Image\\' + str(riqi + name) + '.png'
# 判断图片是否正确
if isinstance(im, Image.Image):
# print ("Image: size : %s, mode: %s" % (im.size, im.mode))
im.save(ImageAdd)
elif im:
for filename in im:
try:
print("filename: %s" % filename)
im = Image.open(filename)
except IOError:
pass # ignore this file
else:
print("ImageList: size : %s, mode: %s") % (im.size, im.mode)
else:
print("clipboard is empty.")
pic.delete() # 删除sheet上的图片
wb.close() # 不保存,直接关闭
app.quit() # 退出
# 返回图片保存地址
return ImageAdd
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)