[PYTHON] J'ai créé un programme automatisé pour coller du squishy dans Excel

introduction

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.

Aperçu

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!!")

Explication du code source

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.

À la fin

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

J'ai créé un programme automatisé pour coller du squishy dans Excel
J'ai fait un programme de gestion de la paie en Python!
J'ai créé un module alternatif pour les japandas.
J'ai créé un programme cryptographique César en Python.
J'ai créé un installateur Ansible
J'ai créé un guide de programme original en utilisant l'API de guide de programme NHK.
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai créé un programme de sortie de table de nombres premiers dans différentes langues
J'ai fait un kit de démarrage angulaire
Je veux colorer une partie de la chaîne Excel avec Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai créé un docset de tableau de bord pour Holoviews
J'ai créé une application d'analyse de fréquence en ligne
Je veux faire un programme d'automatisation!
J'ai cherché un nombre premier avec python
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai fait une image pour qemu avec Yocto, mais j'ai échoué et j'ai recommencé