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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM