Estrarre immagini da excel
Nel caso di un file Excel con all’interno delle immagini (no path, no url) semplicemente ‘incollate’ dentro, come nel caso, ad esempio, di un listino prezzi, un catalogo o altro possiamo utilizzare un codice pyton per farci creare una cartella contenente le immagini e rinominate secondo nostre specifiche.
Ho preso spunto da un estratto di codice (inizialmente non funzionante) presente su stackoverflow (qui il link al thread).
Il codice accetta come parametri il file excel e crea una directory temporanea per le elaborazioni, alla fine elimina la cartella temporanea e lascia un cartella di destinazione contenente le immagini estratte.
Lo riporto qui per comodità (funzionante):
import pathlib import shutil def extract_xls_images(path): if type(path) is str: path = pathlib.Path(path) if path.suffix != '.xlsx': raise ValueError('path must be an xlsx file') source_file = path.name name = path.name.replace(''.join(path.suffixes), '').replace(' ', '') # name of excel file without suffixes temp_file = pathlib.Path(name).parent / 'temp.xlsx' # temp xlsx temp_zip = temp_file.with_suffix('.zip') # temp zip shutil.copyfile(source_file, temp_file) temp_file.rename(str(temp_zip)) extract_dir = temp_file.parent / 'temp' extract_dir.mkdir(exist_ok=True) destination_dir = temp_file.parent / 'dest' destination_dir.mkdir(exist_ok=True) shutil.unpack_archive(temp_zip, extract_dir) # unzip xlsx zip file paths_img = sorted((extract_dir / 'xl' / 'media').glob('*.png')) # find images move_paths = {path: destination_dir / (name + f'-{str(n)}.png') for n, path in enumerate(paths_img)} # create move path dict new_paths = [shutil.move(old, new) for old, new in move_paths.items()] # move / rename image files shutil.rmtree(extract_dir) # delete temp folder temp_zip.unlink() # delete temp file return new_paths extract_xls_images('listino_agricow.xlsx')