Переменная i сбрасывается для каждого листа, поэтому имя вашего файла совпадает и, следовательно, файл перезаписывается.Добавьте вторую переменную, которая будет увеличиваться для каждого листа, чтобы имя файла также включало это.
Это проверено как работающее, я добавил excel.Visible, чтобы вы могли видеть всплывающие окна листов :) Также ведение журнала, чтобы вы могли видеть, чтопроисходит.Вместо использования глобальной переменной count я просто конкатенировал имя книги к имени листа, а затем использовал переменную "n" для каждого изображения листов.
import win32com.client as win32
from PIL import ImageGrab
import os
def ensureDirExists(filePath):
if not os.path.exists(filePath):
os.makedirs(filePath)
def absoluteListDir(directory):
for dirpath,_,filenames in os.walk(directory):
for f in filenames:
yield os.path.abspath(os.path.join(dirpath, f))
dataDirectory = "data"
outputDirectory = "images"
ensureDirExists(dataDirectory)
ensureDirExists(outputDirectory)
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
files = absoluteListDir(dataDirectory)
for file in files:
print("=" * 20)
print("Opening Workbook: ", file)
workbook = excel.Workbooks.Open(file)
for sheet in workbook.Sheets:
print("Scraping Sheet: ", sheet.Name)
for n, shape in enumerate(sheet.Shapes):
if shape.Name.startswith("Picture"):
shape.Copy()
image = ImageGrab.grabclipboard()
outputFile = "{}/{}_{}_{}.jpg".format(outputDirectory, workbook.Name, sheet.Name, n)
print("Saving Image File: ", outputFile)
image.save(outputFile, "jpeg")
print("Closing Workbook")
workbook.Close(True)