Bonjour, c'est Ricky. Pensez-vous qu'il y a un vrai travail de coller sukusho à Excel? Jusqu'à ce jour, je pensais qu'un tel métier était une légende urbaine. Mais tout récemment, j'ai été obligé de faire le travail. Le travail de simplement coller des images du dossier vers Excel ... À ce moment-là, j'ai soudainement remarqué. Cela peut-il être automatisé par programme? Après avoir enquêté, j'ai trouvé qu'il existe une bibliothèque pour coller des images dans Excel et une bibliothèque pour lire des dossiers d'images et obtenir des noms de fichiers! J'ai donc décidé d'aller au programme.
Hypothèse: il est supposé que le dossier d'images à coller existe déjà. Le code source cette fois est exécuté en initialisant le chemin Excel et le chemin du dossier image en tant que variables. Le flux de processus consiste à se connecter à Excel spécifié, à ajouter une feuille à la fin et à coller le fichier image sur cette feuille. De plus, la façon de nommer la feuille est représentée par trois nombres tels que 1-1-1 selon le dossier d'image. À propos, 1-1-1_1 et 1-1-1_2 sont attachés ensemble à la feuille 1-1-1. Lorsque le traitement est terminé, la chaîne de caractères s'affiche.
Voici le code source.
png_file_name.py
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import glob, os, re, cv2
'''
Description to shorten the interval of pasting
when the already pasted image is small
'''
def check_img_size(img):
img_check = cv2.imread(img)
img_check_hight = img_check.shape[0]
cell_interval = 0
if img_check_hight < 500:
cell_interval = 20
elif img_check_hight < 600:
cell_interval = 23
elif img_check_hight < 700:
cell_interval = 26
elif img_check_hight < 800:
cell_interval = 30
elif img_check_hight < 900:
cell_interval = 33
else:
print("ERREUR Il existe un fichier de taille inattendue.")
return cell_interval
def paste_image(ws2, right_num_groups):
before_cell_num = 0
for num in range(len(right_num_groups)):
capture_num = 2
if num != 0:
cell_size = check_img_size(right_num_groups[num - 1])
capture_num = before_cell_num + cell_size + 2
capture_area = 'A' + str(capture_num)
before_cell_num = capture_num
ws2.add_image(Image(right_num_groups[num]), capture_area)
def connect_excel(right_num_groups, folder_num):
wb = load_workbook(filename = excel_name)
sheet_name = str(folder_num + 1) + "-" + str(sheet_name_list[1]) + "-" + str(sheet_name_list[2])
sheet_name = sheet_name.rstrip("\'>[0-9]")
ws2 = wb.create_sheet(title = sheet_name)
ws2['A1'] = "* Joindre une capture d'écran"
paste_image(ws2, right_num_groups)
wb.save(filename = excel_name)
# TODO: change excel's path and evidence folder path
excel_name = 'test.xlsx'
evidence_folder = "C:\\Users\\username\\Documents\\evidence"
folder_list = os.listdir(evidence_folder)
re_word = r'([0-9]-){2}[0-9]'
check_list = []
for folder_num in range(len(folder_list)):
num_folder = evidence_folder + "\\" + folder_list[folder_num]
png_list = os.listdir(num_folder)
for png_num in range(len(png_list)):
re_png_name = re.match(re_word, png_list[png_num])
sheet_name_list = str(re_png_name).split("-")
png_re_name = num_folder + "\\" + re_png_name.group() + "*"
right_num_groups = glob.glob(png_re_name)
if right_num_groups == check_list:
continue
connect_excel(right_num_groups, folder_num)
print(right_num_groups)
check_list = right_num_groups
print("Finish!!")
check_img_size(img) Il évalue la hauteur de l'image cible et renvoie une valeur numérique. Ceci est une description pour éviter que les images ne se chevauchent ou ne soient trop éloignées lors du collage dans Excel.
paste_image(ws2, right_num_groups) C'est le processus de collage d'une image. Il s'agit d'évaluer la taille de l'image collée précédemment afin que les images à coller avec la variable before_cell_num ne se chevauchent pas.
connect_excel(right_num_groups, folder_num) C'est un processus pour se connecter à Excel. Il se connecte à l'Excel spécifié, ajoute une feuille et insère une chaîne de caractères.
main Vous pouvez identifier le fichier image, déplacer la hiérarchie et obtenir toutes les images avec l'expression régulière par la bibliothèque glob. Et enfin, lorsque le traitement est terminé, la chaîne de caractères s'affiche.
Cette fois, j'ai commencé le traitement avec des images et j'ai lancé le programme. Je m'inquiétais de la manière de traiter l'image, mais je suis content d'avoir pu bien le faire. En regardant le code source après avoir terminé, j'ai senti qu'il y avait un problème avec la façon de nommer les variables. Je me demande si folder_num et num_folder existent en même temps ... Cependant, j'étais purement heureux de voir que le processus fonctionnait et que toutes les images étaient collées dans Excel. J'espère que ce code aidera les autres. Vous pouvez cloner Code depuis GitHub. Veuillez l'utiliser. Les impressions sont les bienvenues. Merci d'avoir lu jusqu'ici.
Recommended Posts