Excel Tabellenwerte in Python kopieren

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
Nik012
User
Beiträge: 4
Registriert: Mittwoch 18. September 2019, 14:28

Hallo zusammen,

ich bin recht neu und bei meinem Projekt komme ich an einer Stelle nicht voran:

Ich habe eine Excel-Datei (250 Zeilen/ 6 Spalten). Diese habe ich zunächst mit Pandas in Python importiert.
Nun muss ich nach und nach jeden Tabellenwert kopieren und ihn dann an einer anderen Stelle einfügen.
Die andere Stelle ist eine Seite im Internet.

Hat jemand eine Lösung, wie ich die Tabellenwerte nach und nach kopieren und einfügen kann? Also mir geht es in ersten Hinsicht um das kopieren. Dass es beispeislweise möglich ist dass ich sage "Kopiere Wert aus Zeile 1 Spalte 1", dann "Kopiere Wert aus Zeile 1 Spalte 2" .. und so weiter bis 250/6.
Nik012
User
Beiträge: 4
Registriert: Mittwoch 18. September 2019, 14:28

EDIT: Ich habe jetzt einen Wert aus der Tabelle mit deepcopy(test.loc[1,'Auto']) kopiert.
Wie kann ich jetzt diesen Wert in meinem Browser einfügen?
Zu dem Feld gelange ich über:
pyautogui.moveTo(500,440)
pyautogui.click()
Benutzeravatar
__blackjack__
User
Beiträge: 13099
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Nik012: Komm mal von dem ”kopieren” weg. Du brauchst ziemlich sicher kein `deepcopy()` (und auch kein `copy()`).

Wenn Du den Wert ”eingeben” lassen willst, da wo Du hast klicken lassen, dann musst Du den Wert in eine Zeichenkette umwandeln und mit der entsprechenden Funktion von `pyautogui` “tippen“ lassen.

Ich würde auch noch prüfen ob Du mit 1 die erste oder die zweite Zeile bekommst. Ich weiss gerade nicht aus dem Kopf ob beim einlesen von Excel-Dateien der Index vom `DataFrame` bei 0 oder bei 1 anfängt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Nik012
User
Beiträge: 4
Registriert: Mittwoch 18. September 2019, 14:28

__blackjack__ hat geschrieben: Mittwoch 18. September 2019, 16:52 @Nik012: Komm mal von dem ”kopieren” weg. Du brauchst ziemlich sicher kein `deepcopy()` (und auch kein `copy()`).

Wenn Du den Wert ”eingeben” lassen willst, da wo Du hast klicken lassen, dann musst Du den Wert in eine Zeichenkette umwandeln und mit der entsprechenden Funktion von `pyautogui` “tippen“ lassen.

Ich würde auch noch prüfen ob Du mit 1 die erste oder die zweite Zeile bekommst. Ich weiss gerade nicht aus dem Kopf ob beim einlesen von Excel-Dateien der Index vom `DataFrame` bei 0 oder bei 1 anfängt.
Wie Wandel ich denn den Wert in eine Zeichenkette um?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Nik012 hat geschrieben: Mittwoch 18. September 2019, 21:05 Wie Wandel ich denn den Wert in eine Zeichenkette um?
Mit str(dein_wert) macht man das.
Nik012
User
Beiträge: 4
Registriert: Mittwoch 18. September 2019, 14:28

Super Danke euch. Ich bin jetzt auch fast fertig.
Kann mir noch jemand sagen wie ich Python sagen kann dass es nach einander für n die Werte 0 - 200 annehmen soll?. Es ist ja zu aufwendig funktion(0), funktion(1) .. usw zu schreiben. Also beim ersten Durchgang soll n=0 sein, dann =1 dann =2 usw.


def funktion(n):

#Copy Account
pyautogui.moveTo(12,465)
pyautogui.click()
pyautogui.moveTo(20,530)
pyautogui.click()
time.sleep(3)

#Gehe auf Account owner Name
str(hel2)
pyautogui.moveTo(500,440)
pyautogui.click()
a = (hel2.loc[n,'Account Owner Name'])
pyautogui.typewrite(a)
pyautogui.press('tab')

b = (hel2.loc[n,'Account Number'])
pyautogui.typewrite(b)
pyautogui.press('tab')

c = (hel2.loc[n,'SAP Account Number'])
pyautogui.typewrite(c)
pyautogui.press('tab')

#Auf Safe klicken
pyautogui.moveTo(500,675)
pyautogui.click()

time.sleep(2)

funktion(0)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Code: Alles auswählen

for zahl in range(0,201):
    funktion(zahl)
Benutzeravatar
__blackjack__
User
Beiträge: 13099
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Nik012: Funktionen (und Methoden) sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen. Deine `funktion()` braucht mehr als nur das `n` und verwendet die einfach so ”magisch” aus der Umgebung. Auf Modulebene sollten aber gar keine Variablen definiert sein, sondern nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

`hel2`, `a`, `b`, und `c` sowie `funktion` sind keine guten Namen. Namen sollen dem Leser verraten was der Wert im Programm bedeutet.

Bei den Zuweisungen an `a`, `b`, und `c` sind unnötige Klammern um den Ausdruck auf der rechten Seite. Der Aufruf von `str()` macht so überhaupt keinen Sinn, weil das einfach nur unnötig Rechenzeit für nichts verbraucht, wenn man mit dem Rückgabewert dann nicht auch irgendetwas macht. Ich sehe da nichts sinnvolles was man an der Stelle damit machen könnte → weg damit.

Ich würde sagen den `DataFrame` und den Index an diese Funktion zu übergeben ist keine gute API. Wenn Du über alle Zeilen des `DateFrame` iterieren möchtest, dann mach genau das: über die einzelnen Zeilen iterieren. Da bekommt man `Series`-Objekte und jeweils ein solches Objekt kann man dann der Funktion übergeben.

In der Funktion wiederholt sich der Code zum Tippen eines Wertes drei mal — das wäre ein Fall für eine Schleife.
Speichern heisst „save“ und nicht „safe“.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import time

import pyautogui


def create_account(account):
    # Copy Account
    pyautogui.moveTo(12, 465)
    pyautogui.click()
    pyautogui.moveTo(20, 530)
    pyautogui.click()
    time.sleep(3)

    # Gehe auf Account owner Name
    pyautogui.moveTo(500, 440)
    pyautogui.click()
    
    for key in ["Account Owner Name", "Account Number", "SAP Account Number"]:
        pyautogui.typewrite(account[key])
        pyautogui.press("tab")

    # Auf Save klicken
    pyautogui.moveTo(500, 675)
    pyautogui.click()

    time.sleep(2)


def main():
    # ...
    for _, account in accounts.iterrows():
        create_account(account)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten