Нашел код, который делал что-то похожее, и после небольшого исправления он заработал:
import win32com.client
import PIL
from PIL import ImageGrab, Image
import os
import sys
inputExcelFilePath = "C:\\Users\\Owner\\PycharmProjects\\venv\\automaticexcelgrapherv4\\saveImageTest.xlsx"
outputPNGImagePath = "C:\\Users\\Owner\\PycharmProjects\\venv\\automaticexcelgrapherv4\\PreviewGraphAutomaticExcelGrapher.png"
# This function extracts a graph from the input excel file and saves it into the specified PNG image path (overwrites the given PNG image)
def saveExcelGraphAsPNG(inputExcelFilePath, outputPNGImagePath):
# Open the excel application using win32com
o = win32com.client.Dispatch("Excel.Application")
# Disable alerts and visibility to the user
o.Visible = 0
o.DisplayAlerts = 0
# Open workbook
wb = o.Workbooks.Open(inputExcelFilePath)
# Extract first sheet
sheet = o.Sheets(1)
for n, shape in enumerate(sheet.Shapes):
# Save shape to clipboard, then save what is in the clipboard to the file
shape.Copy()
image = ImageGrab.grabclipboard()
# Saves the image into the existing png file (overwriting) TODO ***** Have try except?
image.save(outputPNGImagePath, 'png')
pass
pass
wb.Close(True)
o.Quit()
saveExcelGraphAsPNG(inputExcelFilePath, outputPNGImagePath)
Функция принимает в качестве входных данных путь к файлу Excel, содержащему график (или несколько, в в этом случае он выберет последний) и путь к существующему изображению PNG, которое затем переопределит, чтобы поместить график внутрь.