Python使用Win32com實現 Excel多個Sheet截圖


參考原文: python 對excel進行截圖 

 

 1 from win32com.client import Dispatch, DispatchEx
 2 import pythoncom
 3 from PIL import ImageGrab, Image
 4 import uuid
 5  
 6  
 7 # screen_area——類似格式"A1:J10"
 8 def excel_catch_screen(filename, sheetname, screen_area, img_name=False):
 9     """ 對excel的表格區域進行截圖——用例:excel_catch_screen(ur"D:\Desktop\123.xlsx", "Sheet1", "A1:J10")"""
10     pythoncom.CoInitialize()  # excel多線程相關
11  
12     excel = DispatchEx("Excel.Application")  # 啟動excel
13     excel.Visible = False  # 可視化
14     excel.DisplayAlerts = False  # 是否顯示警告
15     wb = excel.Workbooks.Open(filename)  # 打開excel
16     wb.Sheets(sheetname).select # 視圖切換到sheetname表
17     ws = wb.Sheets(sheetname)  # 選擇sheet
18     
19     ws.Range(screen_area).CopyPicture()  # 復制圖片區域
20     ws.Paste()  # 粘貼 ws.Paste(ws.Range('B1'))  # 將圖片移動到具體位置
21  
22     name = str(uuid.uuid4())  # 重命名唯一值
23     new_shape_name = name[:6]
24     excel.Selection.ShapeRange.Name = new_shape_name  # 將剛剛選擇的Shape重命名,避免與已有圖片混淆
25  
26     ws.Shapes(new_shape_name).Copy()  # 選擇圖片
27     img = ImageGrab.grabclipboard()  # 獲取剪貼板的圖片數據
28     if not img_name:
29         img_name = name + ".PNG"
30     img.save(img_name)  # 保存圖片
31     wb.Close(SaveChanges=0)  # 關閉工作薄,不保存
32     excel.Quit()  # 退出excel
33     pythoncom.CoUninitialize()
34  
35  
36 if __name__ == '__main__':
37     pass
38     # excel_catch_screen(ur"D:\Desktop\123.xlsx", "Sheet1", "A1:J10")

若要在多個Sheet中截圖

使用 wb.Sheets(sheetname).select 切換 Sheet 再截圖

 

 

 


免責聲明!

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



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