Вытаскивать с google drive как xlsx и потрошить содержимое. Обратить внимание на порядок картинок, если их вытаскивать просто механически, то порядок может не соответствовать ожидаемому (если таблица заполнялась не строго последовательно / картинки менялись местами / строки менялись местами).
import xml.etree.ElementTree as ET
import zipfile
from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build
import pandas as pd
# Настройки:
CREDENTIALS_FILE = 'GoogleSheetsCredentional.json'
FILE_ID = '18c2nnuVKZ-ndfklC6x9Sv9e84PFKc' # из URL таблицы
SCHEMA = './/{http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing}'
# Аутентификация и скачивание:
creds = Credentials.from_service_account_file(CREDENTIALS_FILE, scopes=['https://www.googleapis.com/auth/drive'])
drive_service = build('drive', 'v3', credentials=creds)
# Скачиваем как Excel:
content = drive_service.files().export_media(
mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', fileId=FILE_ID).execute()
# Сохраняем временный файл:
with open('temp.xlsx', 'wb') as f:
f.write(content)
# Извлекаем данные и картинки:
df = pd.read_excel('temp.xlsx')
with zipfile.ZipFile('temp.xlsx', 'r') as z:
# Парсим drawing.xml - потому что порядок картинок может быть не тот что ожидается...
drawing_data = z.read('xl/drawings/drawing1.xml')
root = ET.fromstring(drawing_data)
file_names = []
# Извлекаем картинки:
for anchor in root.findall(f'{SCHEMA}oneCellAnchor'):
image_name = anchor.find(f'{SCHEMA}cNvPr').get('name')
file_names.append(image_name)
z.extract(f'xl/media/{image_name}', 'images')
df['image'] = pd.Series(file_names)
print(df)
З.Ы. можно тоже самое сделать на openpyxl и, наверное, даже проще.