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