zur Zeit schreibe ich ein Script, das mir helfen soll aus einer Excel Tabelle Daten zu entnehmen und diese in eine neue Excel Vorlage nach einem bestimmte Muster zu sortieren.
Bisher bin ich ganz zufrieden mit meinem Script bzw. mit der Funktion und es macht auch das was es soll. Mein Problem liegt nur in der Anzahl der Signale. Ich würde mein Vorhaben gerne in eine Schleife packen aber ich weiß nicht, ob das in meinem Fall überhaupt möglich ist. Ich versuche erst einmal so gut es geht zu erklären, was mein Script machen soll.
In der ersten Abbildung seht ihr die Tabelle 1, die ich von einer Software in diesem Format erhalte und aus der die Informationen entnommen und in die Vorlage aus Abbildung 2 geladen werden soll. In Abbildung 3 seht ihr wie das Endergebnis aussehen soll. Ich habe die Zellen markiert, damit man besser erkennen kann an welche Stelle die Zellen aus Tabelle 1 in Tabelle 3 hinkommen sollen.
Generell geht es darum, dass mit einem Signal (zB Signal_1) bestimmte Tests durchgeführt werden. Das Skript soll prüfen, welche Tests (Spalte „G“, Tabelle 1) für das Signal aus Spalte „C“ (Tabelle 1) vorliegen. Wenn bspw. für Signal_1 der "Test F" vorliegt, hat dieser Test eine ID, die in Spalte „A“ (Tabelle 1) vorliegt. Wichtig ist nun, dass diese ID in die Vorlage an die richtige Stelle geladen wird.
Im Script sind Kommentare enthalten, die euch hoffentlich helfen zu verstehen was Sache ist.
Tabelle 1:Das ist die Tabelle, aus der die Daten in die Vorlage geladen werden sollen https://ibb.co/zQwJSsT
Tabelle 2: Das ist die Vorlage https://ibb.co/hDzHT9m
Tabelle 3: So soll das ganze am Ende aussehen https://ibb.co/37v1vsW
Code: Alles auswählen
from openpyxl import Workbook, load_workbook
workbook_can = load_workbook('C:/Users/t3wa893/PycharmProjects/TestProject/venv/tab_1.xlsx')
signal_sheet = workbook_can['boolean']
template_workbook = load_workbook('C:/Users/t3wa893/PycharmProjects/TestProject/venv/'
'Vorlage_Schnittstellentest_Eingang_Signalmatrix.xlsx')
template_sheet = template_workbook.active
# Signalbezeichnung "Signal_1" wird in die Vorlage geladen
template_sheet['C9'] = (signal_sheet['C1'].value)
# im folgenden wird geprüft, an welcher Stelle sich für Signal_1 der "Test A" befindet
# wenn der Test gefunden wird, wird die Test ID in die Vorlage in die entsprechende Zelle geladen
if signal_sheet['G1'].value == "Test A":
print("Test A gefunden G1!")
template_sheet['D9'] = (signal_sheet['A1'].value) # Test_ID_1 wird in die Vorlage geladen
elif signal_sheet['G2'].value == "Test A":
template_sheet['D9'] = (signal_sheet['A2'].value)
print("Test A gefunden G2!")
elif signal_sheet['G3'].value == "Test A":
template_sheet['D9'] = (signal_sheet['A3'].value)
print("Test A gefunden G3!")
elif signal_sheet['G4'].value == "Test A":
template_sheet['D9'] = (signal_sheet['A4'].value)
print("Test A gefunden G4!")
elif signal_sheet['G5'].value == "Test A":
template_sheet['D9'] = (signal_sheet['A5'].value)
print("Test A gefunden G5!")
elif signal_sheet['G6'].value == "Test A":
template_sheet['D9'] = (signal_sheet['A6'].value)
print("Test A gefunden G6!")
elif signal_sheet['G7'].value == "Test A":
template_sheet['D9'] = (signal_sheet['A7'].value)
print("Test A gefunden G7!")
else:
print("Test A nicht gefunden.")
# jetzt wird für das selbe Signal nach "Test B" gesucht
if signal_sheet['C2'].value == signal_sheet['C1'].value: # If-Abfrage, ob das Signal noch das selbe ist
if signal_sheet['G1'].value == "Test B":
print("Test B gefunden G1!")
template_sheet['E9'] = (signal_sheet['A1'].value)
elif signal_sheet['G2'].value == "Test B":
template_sheet['E9'] = (signal_sheet['A2'].value)
print("Test B gefunden G2!")
elif signal_sheet['G3'].value == "Test B":
template_sheet['E9'] = (signal_sheet['A3'].value)
print("Test B gefunden G3!")
elif signal_sheet['G4'].value == "Test B":
template_sheet['E9'] = (signal_sheet['A4'].value)
print("Test B gefunden G4!")
elif signal_sheet['G5'].value == "Test B":
template_sheet['E9'] = (signal_sheet['A5'].value)
print("Test B gefunden G5!")
elif signal_sheet['G6'].value == "Test B":
template_sheet['E9'] = (signal_sheet['A6'].value)
print("Test B gefunden G6!")
elif signal_sheet['G7'].value == "Test B":
template_sheet['E9'] = (signal_sheet['A7'].value)
print("Test B gefunden G7!")
else:
print("Test B nicht gefunden.")
## Das muss ich nun für das selbe Signal mehrmals tun bis ich bei "Test F" angekommen bin
## Anschließend muss ich prüfen, ob ein weiteres Signal vorhanden ist. Wenn dies der Fall ist,
## wird dies in der Vorlage in die nächste Zeile geschrieben und der Vorgang wird für alle Tests wiederholt
if signal_sheet['C8'].value is None: ######## If-Abfrage, ob weiteres Signal bei boolean vorhanden ist
print("kein zweites Signal bei boolean vorhanden")
else:
template_sheet['C10'] = (signal_sheet['C8'].value) # Signalbezeichnung "Signal_2" wird in die Vorlage geladen
if signal_sheet['G8'].value == "Test A":
print("Test A gefunden G8!")
template_sheet['D10'] = (signal_sheet['A8'].value)
elif signal_sheet['G9'].value == "Test A":
template_sheet['D10'] = (signal_sheet['A9'].value)
print("Test A gefunden G9!")
elif signal_sheet['G10'].value == "Test A":
template_sheet['D10'] = (signal_sheet['A10'].value)
print("Test A gefunden G10!")
elif signal_sheet['G11'].value == "Test A":
template_sheet['D10'] = (signal_sheet['A11'].value)
print("Test A gefunden G11!")
elif signal_sheet['G12'].value == "Test A":
template_sheet['D10'] = (signal_sheet['A12'].value)
print("Test A gefunden G12!")
elif signal_sheet['G13'].value == "Test A":
template_sheet['D10'] = (signal_sheet['A13'].value)
print("Test A gefunden G13!")
elif signal_sheet['G14'].value == "Test A":
template_sheet['D10'] = (signal_sheet['A14'].value)
print("Test A gefunden G14!")
else:
print("Test A für das 2. Signal nicht gefunden.")
# An der Stelle würde anschließend weitergehen mit der Suche nach Test B, C, D, E und F
template_workbook.save('C:/Users/t3wa893/PycharmProjects/TestProject/venv/Ergebnis.xlsx')
Wenn man ein wenig verstanden hat, was ich hier vorhabe, bemerkt man schnell, dass das Skript bei z.B. 20 verschiedenen Signalen sehr lang werden würde.
Ich hoffe, dass ich das halbwegs vernünftig geschildert habe
Da ich nun immer genaue Zellen "ansprechen" muss, weiß ich nicht, ob es möglich ist mein Vorhaben in eine for-Schleife zu stecken.
Habt ihr da vielleicht eine Idee?
Vielen Dank im Voraus!!