Clever-Excel-Forum

Normale Version: Mit Python in Excel Datei schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo, wir ist es schon gelungen mit Python in Excel zu schreiben..
[attachment=33825]

ich seht hier im Bild den letzten Ausdruck einer For-Schleife. Mir ist es bislang nicht gelungen, daß die Forschleife nach jeder Zeile einen Eintag in der excel Latein hinterlässt. Deswegen habe ich versucht dies in eine Funktion zu packen. Aber irgendwie geht es nicht. Wer weiß Rat
Code:
from openpyxl import Workbook
from openpyxl import load_workbook
import matplotlib.pyplot as plt
import numpy as np
from sympy.ntheory import isprime
from sympy import sieve
from sympy import primepi


wb = Workbook()

#ws=wb.active

nr=0
nr1=0
zahl=1000

def drucken(a,b,c,d):
    ws=wb.active
    ws.append([a,b,c,d])
    wb.save("test1excel.xlsx")


def ermittel_primteiler(x):
    primteiler_liste=[]
    for i in range(3,x//2,2):
        if x%i==0 and isprime(i):
            primteiler_liste.append(i)
    return(primteiler_liste)
   
for laufvariable in range(3,zahl//2,10):
        nr=nr+1
        pendant=zahl-laufvariable-4
        liste_laufvariable=ermittel_primteiler(laufvariable)
        liste_pendant=ermittel_primteiler(pendant)
        #if len(liste_laufvariable)==2 and len(liste_pendant)==2:
        if 11 in liste_laufvariable and 13 in liste_pendant:   
            nr1=nr1+1
           #print("Nr:",nr,"Nr1:",nr1,laufvariable,"+",pendant,liste_laufvariable,liste_pendant)
           drucken(nr,nr1,laufvariable,pendant)

#def drucken(a,b,c,d)
#ws=wb.active
#ws.append([a,b,c,d])
Wichtig: Das Programm tat sonst, was es sollte, ich hab nur das Print auskommentiert...
Fortschritt 1.
meine Datei sieht jetzt so aus: 
[attachment=33827]

es ist also gelungen, dynamisch Daten durch ein For einzufügen. Nun möchte ich noch die Primteiler einfügen, d. h. eine Liste kleine von ca. 3 Zahlen, einfügen. Hier streikt mein Programm: Es sagt: "ValueError: Cannot convert [17, 29] to Excel" Ihn stören offensichtlich die beiden Zahlen. Wer weiss, was ich tun muß? Statt PT sollen dort jeweils die Primteiler hin, also eine kleine Liste, so wie es eine Excel-Zelle zulässt. 


Code:
from openpyxl import Workbook
from openpyxl import load_workbook
import matplotlib.pyplot as plt
import numpy as np
from sympy.ntheory import isprime
from sympy import sieve
from sympy import primepi


wb = Workbook()
zahl=500
laufv=0
i=0

def ermittel_primteiler(x):
    primteiler_liste=[]
    for i in range(3,x//2,2):
        if x%i==0 and isprime(i):
            primteiler_liste.append(i)
    return(primteiler_liste)

ws=wb.active          
for n in range(3,zahl//2,10):
    i = i+1
    pendant=zahl-n-4
    laufv=zahl-pendant-4
    liste_laufv=ermittel_primteiler(laufv)
    liste_pendant=ermittel_primteiler(pendant)
    ws.append([i,pendant,5,laufv,5])
wb.save("test1excel.xlsx")
WAS kann ich tun?

(Am Sonnabend scheint keiner vor dem Computer zu hocken, vllt sind alle in Berlin ?)


Fortschritt 2 - Der nächste Erfolg ist zu verbuchen ...
[attachment=33829]
allerdings fehlen die Kommata zwischen den einzelnen PT. Die Lösung war übrigens, die Liste in einen String umzuwandeln.
Mal sehen, ob ich das letze Problem gelöst habe, bevor jemand antwortet....

Fortschritt 3 - Auch das Problem mit den Kommata ist gelöst!
[attachment=33830]
es bleibt nur das Problem, daß nach dem letzten Primteiler das Komma überflüssig ist... Weiss jemand da einen Tip?


Ich poste mal für Mitstreiter den Code...

Code:
from openpyxl import Workbook
from openpyxl import load_workbook
import matplotlib.pyplot as plt
import numpy as np
from sympy.ntheory import isprime
from sympy import sieve
from sympy import primepi


wb = Workbook()
zahl=500
laufv=0
i=0

def ermittel_primteiler(x):
    primteiler_liste=[]
    for i in range(3,x//2,2):
        if x%i==0 and isprime(i):
            primteiler_liste.append(i)
    return(primteiler_liste)

ws=wb.active          
for n in range(3,zahl//2,10):
    i = i+1
    pendant=zahl-n-4
    laufv=zahl-pendant-4
    liste_laufv=ermittel_primteiler(laufv)
    liste_pendant=ermittel_primteiler(pendant)
    PTlaufv=""
    for x in liste_laufv:
        PTlaufv = PTlaufv+str(x)+", "
    PTpendant=""
    for y in liste_pendant:
        PTpendant = PTpendant+str(y)+", "
    ws.append([i,pendant,PTpendant,laufv,PTlaufv])
wb.save("test1excel.xlsx")
Die Deutschen waren nie sonderliche Revoluzzer. Anscheinend ändert sich das jetzt - und das gerade bei so einem verhältnismäßig lächerlichen Thema wie Demonstrationsfreiheit, die gerade dann eingefordert wird, wenn der Staat sie nicht in voller Gänze gewährleisten kann (aber maximal will). Das lässt einiges befürchten.

Zum Vergleich: Rassismus ist viel mehr ein Grund! Da wir den hier jedoch nicht in dem US-Maße haben, wird eine andere Kuh durchs Dorf getrieben. Und zwar auch von Rassisten. AfD + Verschwörer = AfD-Stärke vor Corona.
_______________

Schicke Sache das, mit Python! Versuche doch mal, Deine Erkenntnisse zu dokumentieren. Dann könnte man in diesem Forum einen Tutorial-Beitrag daraus bauen.