@noisefloor
Tut mir sehr leid, es war nicht meine Absicht das zu ignorieren, ich dachte die Beschreibung reicht womöglich und ich konnte mir bisher nicht genügend Zeit für einen anständigen Post in diesem Forum nehmen. Selbstverständlich bin ich euch für eure Hilfe sehr dankbar.
Das Programmieren kein raten ist weiß ich selbstverständlich auch, ich habe ja auch das gesamte Programm bisher ohne größere Probleme runtergeschrieben, nur bei dieser Funktion habe ich ein Problem das ich logisch nicht lösen konnte und habe etwas planlos rumprobiert und die Ergebnisse hier reingestellt mit der Hoffnung sie könnten euch eventuell helfen.
@__deets__
Ja das weiß ich auch, ich habe nur nachdem ich das ganze mit dictionarys aufgebaut habe, es nochmal kurz zu lists gemacht weil ich eine Idee hatte, die mir allerdings trotzdem nicht weitergeholfen hat und bei dic_xlsx2 vergessen es wieder rückgängig zu machen. dic_xlsx1 wäre in diesem fall wirklich ein dictionary.
Bevor ich die Ausgabe des Scripts poste hier nochmal eine detailierte Beschreibung des Programms:
Das Programm soll aus einer Excel Datei einige Zellen in eine liste packen in denen Artikelnummern stehen. (Das Funktioniert ohne Probleme)
Danach soll es zur zweiten Excel Tabelle gehen und dort einige Zellen nach genau diesen Artikelnummern durchsuchen und sich die vertikale Position dieser Artikelnummer in eine weitere liste eintragen. (Da liegt mein Problem, genauere Beschreibung bei der Ausgabe).
Anschließend soll es weiterarbeiten in der zweiten Excel Tabelle und zwar insofern das es Zellen mit der selben vertikalen Position die zuvor in einer list gespeichert wird und einer festen horizontalen Position in eine liste speichert. (Das Funktioniert ebenfalls ohne Probleme)
Danach geht es wieder zur ersten Excel Tabelle zurück und trägt die zuvor in der liste abgespeicherten Zellen aus der zweiten Excel Tabelle in die erste ein. (Und auch das geht ohne Probleme)
Nun zur gewünschten und zur tatsächlichen Ausgabe.
Code: Alles auswählen
def get_xlsx2_position(xlsx2, list_xlsx1):
read_xlsx2 = openpyxl.load_workbook(xlsx2)
sheet2 = read_xlsx2.get_active_sheet()
cell_xlsx2 = "placeholder"
vertical_xlsx2 = 1
position_list_xlsx2 = []
while cell_xlsx2 != None:
for search_string in list_xlsx1:
cell_xlsx2 = sheet2.cell(row=vertical_xlsx2, column=1).value
if cell_xlsx2 == search_string:
position_list_xlsx2.append(vertical_xlsx2)
vertical_xlsx2 += 1
return position_list_xlsx2
Mit diesem Code bekomme ich diese Ausgabe:
[501, 506, 690, 691, 794, 938, 1070, 1075, 1641, 1747, 2601, 3065, 3222, 3239, 3326, 3338, 3362, 3373, 3497, 3596]
Die Artikelnummern in der list_xlsx1 sind folgende:
[8806500, 8106235, 8601800, 8601060, 2377090, 2377880, 8611020, 8611180, 8612080, 8612260, 2500310, 2500400, 3110000, 3240100, 3240200, 7240220, 4118000, 2573000, 4377000, 8800330]
Und wie man sieht findet er zuerst die niedrigste Artikelnummer "2377090" und trägt auch als erstes dessen Position in die position_list_xlsx2.
Um mit der list position_list_xlsx2 allerdings in den weiteren Funktionen etwas anfangen zu können muss ich erst die Position der Artikelnummer "8806500", dann "8106235" und so weiter finden.
@Sirius3
Du bzw. ihr wisst es bestimmt besser, aber ich denke das ein dictionary anstatt einer list mit in diesem Fall nicht weiterhilft (siehe oben Beschreibung des Programms), aber ich lasse mich gerne eines besseren belehren.
Ich nehme an das ich einfach nur etwas an diesen 2 Schleifen ändern muss um zu meinem gewünschten Ergebnis zu kommen, doch ich weiß leider nicht was.
Ich hoffe sehr diese Beschreibung reicht diesmal aus und tut mir leid euch davor mit den anderen Posts in die ich zu wenig Zeit investiert habe, eure Zeit geraubt zu haben.
MfG
VoLLioMenTT