Pandas öffnet den Pfad einer Exceldatei nicht aus einer Variablen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
ninox023
User
Beiträge: 4
Registriert: Montag 21. Juni 2021, 19:11

Hallo zusammen,

ich bin relativer Anfänger mit python und komme aus der VBA-Programmierung. Aktuell versuche ich mich an einer GUI, um diverse Möglichkeiten mit python zu erlernen. Aktuell sitze ich seit mehreren Stunden vor einem Problem, um eine Excelliste mit Pandas zu öffnen. Mit Hilfe des QFileDialogs hole ich mir den Pfad der geöffneten Excelliste. Die Excelliste soll dann in ein Dataframe eingefügt werden, welches mit einer SQL-Anweisung in eine mySQL-Datenbank übertragen werden soll. Aktuell kommt es zu einem Fehler bei der Übergabe des Pfades mit Hilfe einer Variable an pandas. Füge ich anstatt der Variablen einen Pfad als String ein, funktioniert es :roll:

Ich glaube, dass der Pfad, welcher an die Variable übergeben wird, nicht von pandas gelesen werden kann, sodass ich diesen noch anpassen muss. Leider hat bis dato das ganze googlen und ausprobieren nicht funktioniert, sodass ich um jeden Rat dankbar bin.

Anbei mein aktueller Code:

Code: Alles auswählen

import sys
from PyQt5.uic import loadUi  ### Ermöglicht das Laden der UI
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QWidget, QFileDialog
import mysql.connector as mydb
import pandas as pd


class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi("mainScreen.ui", self)  ### Die UI wird dadurch geladen und alle enthaltenen Objekte an self übergeben
        self.btnPacklisteImport.clicked.connect(self.PacklisteImport)

    def PacklisteImport(self):
        path = self.open_excel_file()
        #print(path)
        df = pd.read_excel(path)
        print(df)

    def open_excel_file(self):
        fileNameTuple = QFileDialog.getOpenFileName(self, 'Öffne Excel-Datei', '', '*.xls')
        ### In der Variablen "fileNameTuple" wird ein Tuple gespeichert -> Index[0] der Variable hat den Pfad der Datei ###
        path = fileNameTuple[0]
        return path


### main
app = QApplication(sys.argv)
window = MainWindow()
widget = QtWidgets.QStackedWidget()
widget.addWidget(window)
widget.setFixedHeight(800)
widget.setFixedWidth(1200)
widget.show()

try:
    sys.exit(app.exec_())
except:
    print("Exiting")
Besten Dank und beste Grüße
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Hi ninox023,

was bekommst du denn für eine Fehlermeldung?
Ist denn der Pfad richtig? Du must ja sicher den kompletten Pfad angeben.
ninox023
User
Beiträge: 4
Registriert: Montag 21. Juni 2021, 19:11

rogerb hat geschrieben: Montag 21. Juni 2021, 23:02 Hi ninox023,

was bekommst du denn für eine Fehlermeldung?
Ist denn der Pfad richtig? Du must ja sicher den kompletten Pfad angeben.
Hey roberb,

danke für deine Rückmeldung. Aufgrund deiner Rückmeldung habe ich es noch einmal durchgespielt. Es scheint, als ob Excel-Dateien, welche ich durch eine Verkaufsplattform bekomme, einen Fehler auslösen. Beim Einlesen dieser Dateien stürzt die GUI ab und ich kriege folgende Fehlermeldeung:
_locate_stream(Workbook): seen
0 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 2

Process finished with exit code -1073740791 (0xC0000409)
Ich habe jedoch herausgefunden, dass andere Dateien mit dem obigen Code funktionieren. Ferner habe ich die Excelliste der Verkaufsplattform neu mit "Speichern unter" gespeichert. Hierbei ist mir aufgefallen, dass sich die Größe nach oben anpasst. Das Einlesen der neu gespeicherten Datei funktioniert :shock:

Um das Problem zu lösen, würde ich einen Workaround bauen, sodass zunächst die Datei überschrieben wird, damit ich diese mit Pandas öffnen kann. Erklären kann ich es mir jedoch nicht :cry:
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Das googeln nach der Fehlermeldung liefert schnell: https://stackoverflow.com/questions/127 ... d#65254855
ninox023
User
Beiträge: 4
Registriert: Montag 21. Juni 2021, 19:11

Sirius3 hat geschrieben: Dienstag 22. Juni 2021, 07:54 Das googeln nach der Fehlermeldung liefert schnell: https://stackoverflow.com/questions/127 ... d#65254855
Hey Sirius3,

besten Dank für den Link. Leider ist mein Kenntnisstand noch nicht soweit, dass ich verstehe, wie und wo ich eine __init__.py Datei erstelle und diese mit Hilfe meiner GUI automatisch laden kann. Nichtsdestotrotz hast Du mir mit deinem Link sehr geholfen, sodass ich auf eine andere Seite gestoßen bin, welche für das Problem zwei Lösungen hat. Unter anderem wird der von mir gedachte Weg eines Workarounds beschrieben.

Code: Alles auswählen

import win32com.client as win32

excel_app = win32.Dispatch('Excel.Application')
wb = excel_app.Workbooks.open("test.xls")
excel_app.DisplayAlerts = False #do not show any alert when closing the excel
wb.Save()
excel_app.quit()
Problematisch hierbei ist jedoch, dass alle geöffneten Exceldateien geschlossen werden. Zum aktuellen Zeitpunkt reicht mir die Lösung. Im weiteren Verlauf werde ich dies noch anpassen wollen, sobald ich mich besser mit Python auskennen.

Mein aktueller Code sind dann wie folgt aus:

Code: Alles auswählen

import sys
from PyQt5.uic import loadUi  ### Ermöglicht das Laden der UI
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QWidget, QFileDialog
import mysql.connector as mydb
import pandas as pd
import win32com.client as win32

class MainWindow(QDialog):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi("mainScreen.ui", self)  ### Die UI wird dadurch geladen und alle enthaltenen Objekte an self übergeben
        self.btnPacklisteImport.clicked.connect(self.PacklisteImport)

    def PacklisteImport(self):
        path = self.open_excel_file()
        print(path)
        df = pd.read_excel(path)
        print(df)

    def open_excel_file(self):
        fileNameTuple = QFileDialog.getOpenFileName(self, 'Öffne Excel-Datei', '', '*.xls')
        ### In der Variablen "fileNameTuple" wird ein Tuple gespeichert -> Index[0] der Variable hat den Pfad der Datei ###
        path = fileNameTuple[0]

        excel_app = win32.Dispatch('Excel.Application')
        wb = excel_app.Workbooks.open(path)
        excel_app.DisplayAlerts = False  # do not show any alert when closing the excel
        wb.Save()
        excel_app.quit()

        return path


### main
app = QApplication(sys.argv)
window = MainWindow()
widget = QtWidgets.QStackedWidget()
widget.addWidget(window)
widget.setFixedHeight(800)
widget.setFixedWidth(1200)
widget.show()

try:
    sys.exit(app.exec_())
except:
    print("Exiting")
Besten Dank an dieser Stelle für die Anregungen und Hilfestellungen!
Antworten