import win32com.client as win32
import os
import time
from PIL import ImageGrab
import gc
def screenshot_excel_range(output_file, sheet_name, range_address=None):
file_path = output_file.replace(".png", ".xlsx")
print(f"Открываю файл: {file_path}")
abs_path = os.path.abspath(file_path)
print(f"Абсолютный путь: {abs_path}")
if not os.path.exists(file_path):
print(f"ОШИБКА: Файл не существует: {file_path}")
return
try:
excel = win32.Dispatch('Excel.Application')
excel.Visible = True
excel.DisplayAlerts = False
print("Excel запущен, пытаюсь открыть книгу...")
try:
workbooks = excel.Workbooks
workbook = workbooks.Open(r"{}".format(abs_path), ReadOnly=1)
print("Книга успешно открыта")
try:
sheet = workbook.Worksheets(sheet_name)
print(f"Лист '{sheet_name}' найден")
if range_address is None:
print("Используем видимую область")
excel.ActiveWindow.View = 1
sheet.Activate()
visible_range = excel.ActiveWindow.VisibleRange
rng = visible_range
else:
print(f"Используем указанный диапазон: {range_address}")
rng = sheet.Range(range_address)
print("Копирую изображение в буфер обмена...")
rng.CopyPicture(Appearance=1, Format=2)
time.sleep(2.0)
print("Получаю изображение из буфера обмена...")
img = ImageGrab.grabclipboard()
if img:
print(f"Сохраняю изображение в {output_file}")
img.save(output_file)
print(f"Изображение успешно сохранено в {output_file}")
else:
print("Не удалось получить изображение из буфера обмена.")
except Exception as e:
print(f"Ошибка при работе с листом: {e}")
finally:
print("Закрываю книгу...")
workbook.Close(SaveChanges=False)
print("Книга закрыта")
except Exception as e:
print(f"Ошибка при открытии книги: {e}")
finally:
print("Закрываю Excel...")
excel.Quit()
print("Excel закрыт")
except Exception as e:
print(f"Общая ошибка: {e}")
finally:
print("Очистка COM-объектов...")
gc.collect()
print("Готово")
Открываю файл: C:\Users\Administrator\Desktop\Bot_Count_Roof_Cost\таблица_998992278_a951318df67b429faec3bf26486b9416.xlsx
Абсолютный путь: C:\Users\Administrator\Desktop\Bot_Count_Roof_Cost\таблица_998992278_a951318df67b429faec3bf26486b9416.xlsx
Excel запущен, пытаюсь открыть книгу...
Ошибка при открытии книги: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Open method of Workbooks class failed', 'xlmain11.chm', 0, -2146827284), None)
Закрываю Excel...
Excel закрыт
Очистка COM-объектов...
Готово
except Exception
сейчас код хуже, чем он был бы вообще без обработки ошибок.workbook = workbooks.Open(r"{}".format(abs_path), ReadOnly=1)
и далее может быть 2 класса ошибок: ошибки, которые можно обработать и нельзя. Чтобы понять какая это ошибка, нужно видеть полный traceback, но с учетом какой-то черной виндовой магии для работы с экселем, возможно его вообще не получить.