[PYTHON] Ich habe ein automatisiertes Programm zum Einfügen von Squishy in Excel erstellt

Einführung

Hallo, das ist wackelig. Glaubst du, es gibt eine echte Aufgabe, Sukusho an Excel zu halten? Bis zu diesem Tag hielt ich einen solchen Job für eine urbane Legende. Aber erst kürzlich war ich gezwungen, den Job zu machen. Das Einfügen von Bildern aus dem Ordner in Excel ... Zu dieser Zeit bemerkte ich plötzlich. Kann dies programmgesteuert automatisiert werden? Nach einer Untersuchung stellte ich fest, dass es eine Bibliothek zum Einfügen von Bildern in Excel und eine Bibliothek zum Lesen von Bildordnern und zum Abrufen von Dateinamen gibt! Also habe ich beschlossen, zum Programm zu gehen.

Überblick

Annahme: Es wird davon ausgegangen, dass der einzufügende Bildordner bereits vorhanden ist. Der Quellcode wird diesmal ausgeführt, indem der Excel-Pfad und der Bildordnerpfad als Variablen initialisiert werden. Der Prozessablauf besteht darin, eine Verbindung zum angegebenen Excel herzustellen, am Ende ein Blatt hinzuzufügen und die Bilddatei in dieses Blatt einzufügen. Darüber hinaus wird die Benennung des Blattes durch drei Zahlen dargestellt, z. B. 1-1-1, je nach Bildordner. Übrigens werden 1-1-1_1 und 1-1-1_2 zusammen an das 1-1-1-Blatt angehängt. Nach Abschluss der Verarbeitung wird die Zeichenfolge angezeigt.

Unten ist der Quellcode.

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("FEHLER Es gibt eine Datei mit unerwarteter Größe.")
    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'] = "* Fügen Sie eine Bildschirmaufnahme hinzu"
    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!!")

Erklärung des Quellcodes

check_img_size(img) Es wertet die Höhe des Zielbildes aus und gibt einen numerischen Wert zurück. Dies ist eine Beschreibung, um zu verhindern, dass sich die Bilder beim Einfügen in Excel überlappen oder zu weit voneinander entfernt sind.

paste_image(ws2, right_num_groups) Dies ist der Vorgang des Einfügens eines Bildes. Hiermit wird die Größe des zuvor eingefügten Bildes ausgewertet, damit sich die Bilder, die mit der Variablen before_cell_num eingefügt werden sollen, nicht überlappen.

connect_excel(right_num_groups, folder_num) Es ist ein Prozess, um eine Verbindung zu Excel herzustellen. Es stellt eine Verbindung zum angegebenen Excel her, fügt ein Blatt hinzu und fügt eine Zeichenfolge ein.

main Sie können die Bilddatei identifizieren, die Hierarchie verschieben und alle Bilder mit dem regulären Ausdruck von der Glob-Bibliothek abrufen. Und schließlich wird nach Abschluss der Verarbeitung die Zeichenfolge angezeigt.

Am Ende

Dieses Mal begann ich mit der Verarbeitung mit Bildern und startete das Programm. Ich war besorgt darüber, wie ich das Bild verarbeiten sollte, aber ich bin froh, dass ich es gut machen konnte. Als ich nach Abschluss des Vorgangs auf den Quellcode zurückblickte, stellte ich fest, dass es ein Problem mit der Benennung der Variablen gab. Ich frage mich, ob folder_num und num_folder gleichzeitig existieren ... Ich war jedoch nur froh zu sehen, dass der Prozess funktionierte und alle Bilder in Excel eingefügt wurden. Ich hoffe, dieser Code hilft anderen. Sie können Code von GitHub klonen. Bitte benutzen Sie es. Impressionen sind willkommen. Vielen Dank, dass Sie so weit gelesen haben.

Recommended Posts

Ich habe ein automatisiertes Programm zum Einfügen von Squishy in Excel erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe ein alternatives Modul für japandas.DataReader erstellt
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe einen Ansible-Installer gemacht
Ich habe einen Original-Programmführer mit der NHK-Programmführer-API erstellt.
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Ich habe ein Ausgabeprogramm für Primzahlentabellen in verschiedenen Sprachen erstellt
Ich habe ein Angular Starter Kit gemacht
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe eine Online-Frequenzanalyse-App erstellt
Ich möchte ein Automatisierungsprogramm erstellen!
Ich habe mit Python nach einer Primzahl gesucht
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich habe mit Yocto ein Bild für Qemu gemacht, aber ich habe versagt und von vorne angefangen