Python und Excel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bykl
User
Beiträge: 103
Registriert: Donnerstag 5. Oktober 2017, 17:57

Hallo, ich will in Excel von Python eine Liste ausgeben lassen. Das klappt auch. Es gibt nur einen Schönheitsfehler. Python packt die Werte der Liste alle in eine Zelle. Ich will aber, daß er jeden Wert in die aufeinanderfolgenden Zellen einer Zeile packt.

Da der Druckbefehl in einer for-Schleife steht: eröffnet ws.append() jeweils ein neue Zeile. Es müßte also eine For-Schleife in den Druckbefehl rein, die ein Komma und einen Wert einbringt, damit Excel denkt, es handele sich um eine CSV-Datei, und eine Zelle weiterrückt. Was kann ich tun?

Das isses irgendwie nicht:

Code: Alles auswählen

ws=wb.active 
for i in range(1,70,1):
    cont=teiler_ermittler(i)
    cont1=""
    for y in cont:
        cont1 = cont1+str(y,)+", "
    ws.append([i,cont1]) 
    #ws.append([cont],) 
    print(i,teiler_ermittler(i))
Zuletzt geändert von Bykl am Donnerstag 4. Februar 2021, 16:55, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich würde sagen, ganz eindeutig, du machst etwas falsch.
Was das genau ist, kann aber niemand sagen, weil niemand weiß, wie Du denn Deine Excel-Datei schreibst. Zeige Deinen Code, Input und Output, und was Du gerne anders hättest.
Bykl
User
Beiträge: 103
Registriert: Donnerstag 5. Oktober 2017, 17:57

Hier ist das Bild.

Bild

Die Zahlen in der 2. Zeile sollen jeder in einer extra Zelle stehen, und nicht alle in einer Zelle! Und das Komma aus der Liste will ich auch nicht drin haben, es ist ja unnötig, wenn jeder Teiler in einer Zelle steht.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du nicht eine Zelle haben willst, dann würde ich als erstes keinen String erzeugen, in den Du per Komma getrennte Zahlen reinschreibst.
Bykl
User
Beiträge: 103
Registriert: Donnerstag 5. Oktober 2017, 17:57

Okay, und dann, was soll ich dann als 2.machen ?

Wenn ich so macht ....

Code: Alles auswählen

ws=wb.active 
for i in range(1,70,1):
    cont=teiler_ermittler(i)
  
    ws.append([i,cont]) 
    #ws.append([cont],) 
    print(i,teiler_ermittler(i))
kommt:
ValueError: Cannot convert [] to Excel
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bykl: Die `append()`-Methode vom Arbeitsblatt will ein Element pro Spalte. Also ``[1, 2, 3, 4]``. Was Du da jetzt versucht hast ist ``[1, [2, 3, 4]]``.

Das kannst Du mit einer Schleife machen. Oder die `extend()`-Methode von Listen verwenden. Oder die „unpacking syntax” mit ``*`` in einem Listenliteral.

Die Zeichenkette hattest Du übrigens sehr umständlich und ineffizient zusammengebastelt. Das hätte man mit der `join()`-Methode auf Zeichenketten gemacht:

Code: Alles auswählen

In [469]: ", ".join(map(str, range(10)))                                        
Out[469]: '0, 1, 2, 3, 4, 5, 6, 7, 8, 9'
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten