Power Query
#11
..wow... was für ein Aufwand... :) ... aber wirkungsvoll. Hätte nicht gedacht, dass das mit PQ möglich ist...

Fehlt eigentlich nur noch, dass man gezielt nach jedem einzelnen Schritt innerhalb einer Query filtern könnte. Man kann eben nicht alles haben... Dann eben doch wieder back to VBA... oder die Extract_PQ_Codes mal richtig zur Brust nehmen und analysieren. Hab ich aber jetzt keinen Bock drauf...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#12
Zitat:Dann eben doch wieder back to VBA...


Damit wird es vermutlich auch nicht einfach gehen.

Zuerst einmal ist es ja so, dass die Schrittnamen "Source" und "Quelle" völlig beliebig benannt sein können und nach dem lesen von Parameterwerten auch lange nach "let" stehen können. Auch kann eine Abfrage ja mehrere Importe, als auch indirekte (Anfügen, zusammenführen), haben können.

Somit müssen aus jeder Abfrage vermutlich zuerst einmal die Funktionen gefiltert werden, mit denen Daten importiert werden. Da aber mit: "= [Abfragename]" auch das Ergebnis anderer Abfragen importiert werden kann, mus auch diese Möglichkeit geprüft werden.

Ich stelle mir dies insgesamt als sehr aufwändig vor.
Antworten Top
#13
...so sieht es aus. Hatte ich schon im Post #2 angesprochen...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#14
Guten Abend eure Diskusion hat mich auf eine neue Fährte gebracht.
Ich habe mit Hilfe von Cat Gpt ein python skript geschrieben das alle Informationen aus den  xml eines Verzeichnisses mit Unterverzeichnissen  herausliest und in eine Excel datei speichert.
Einziger Nachteil, das Skript kann nicht auf bereits geöffnete Dateien zugreifen

Grüße Rolf

hier das Skript

import os
import subprocess
import openpyxl
from openpyxl import Workbook
def check_file_locked(file_path):
    """Überprüft, ob die Datei gesperrt ist, indem versucht wird, sie zu öffnen."""
    try:
        with open(file_path, 'a'):
            return False
    except IOError:
        return True
def prompt_user_to_close_application(file_path):
    """Aufforderung an den Benutzer, die Anwendung zu schließen, die auf die Datei zugreift."""
    while check_file_locked(file_path):
        print(f"Die Datei '{file_path}' wird von einer anderen Anwendung verwendet.")
        print("Bitte schließen Sie die Datei und drücken Sie Enter, um es erneut zu versuchen.")
        input()
def delete_existing_excel(file_path):
    """Löscht die bestehende Excel-Datei, nachdem der Benutzer sie entsperrt hat."""
    while True:
        try:
            if os.path.exists(file_path):
                os.remove(file_path)
                print(f"Die bestehende Zieldatei '{file_path}' wurde erfolgreich gelöscht.")
            break
        except PermissionError:
            print(f"Die Datei '{file_path}' wird von einer anderen Anwendung verwendet.")
            print("Bitte schließen Sie die Anwendung, die auf die Datei zugreift, und drücken Sie Enter, um fortzufahren.")
            input()
def run_script(script_path, script_name, inputs, use_stdin=False):
    full_script_path = os.path.join(script_path, script_name)
    try:
        if use_stdin:
            process = subprocess.Popen(
                ["python", full_script_path],
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True
            )
            stdout, stderr = process.communicate('\n'.join(inputs) + '\n')
            if stdout:
                print("Standardausgabe (stdout):", stdout)
            if stderr:
                print("Fehlerausgabe (stderr):", stderr)
        else:
            process = subprocess.Popen(
                ["python", full_script_path] + inputs,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True
            )
            stdout, stderr = process.communicate()
        if process.returncode == 0:
            print(f"{script_name} wurde erfolgreich ausgeführt.")
        else:
            print(f"Fehler beim Ausführen von {script_name}. Rückgabecode: {process.returncode}")
            print("Fehlerausgabe (stderr):", stderr)
    except Exception as e:
        print(f"Ein Fehler ist aufgetreten: {e}")
    return stdout  # Return the output to be written to Excel
def write_to_excel(filtered_data, file_path, sheet_name):
    """Schreibt die gefilterten Ausgabedaten in eine Excel-Datei mit Spalten für Excel-Datei und Gefundener Pfad."""
    workbook = Workbook()
    sheet = workbook.active
    sheet.title = sheet_name
    # Header hinzufügen
    sheet.cell(row=1, column=1, value="Excel-Datei")
    sheet.cell(row=1, column=2, value="Gefundener_Pfad")
    for row_index, line in enumerate(filtered_data, start=2):  # Startet bei Zeile 2 für die Daten
        if "Excel-Datei:" in line and ", Gefundener Pfad:" in line:
            # Extrahiert den Dateinamen und den Pfad
            excel_datei = line.split("Excel-Datei: ")[1].split(", Gefundener Pfad:")[0].strip()
            gefundener_pfad = line.split("Gefundener Pfad:")[1].strip()
            # Schreibt die Daten in die jeweiligen Spalten
            sheet.cell(row=row_index, column=1, value=excel_datei)
            sheet.cell(row=row_index, column=2, value=gefundener_pfad)
    workbook.save(file_path)
    print(f"Die gefilterten Ergebnisse wurden in '{file_path}' im Blatt '{sheet_name}' gespeichert.")
def main():
    # Benutzer nach Quelle und Ziel fragen
    base_path = input("Bitte geben Sie den Pfad zum Quellverzeichnis mit den Excel-Dateien ein: ")
    excel_file_name = input("Bitte geben Sie den Namen der Excel-Datei für die Ausgabe ein (ohne Endung .xlsx): ") + ".xlsx"
    excel_file_path = os.path.join(base_path, excel_file_name)
    scriptZip_path = os.path.join(base_path, "Python_script")
    scriptZip_name = "import zipfile.py"
    inputs_scriptZip = [
        base_path,
        "ExcelQuellen",
        base_path
    ]
    delete_existing_excel(excel_file_path)
    # Script ausführen und Ergebnis erfassen
    output_data = run_script(scriptZip_path, scriptZip_name, inputs_scriptZip, use_stdin=True)
    # Ausgabe filtern, um nur Zeilen ohne die spezifischen Texte einzuschließen
    filtered_data = [
        line for line in output_data.splitlines()
        if "Keine passenden Referenzen in sharedStrings.xml gefunden" not in line and
           "sharedStrings.xml wurde nicht gefunden." not in line
    ]
    # Gefilterte Ausgabe in die Excel-Datei schreiben
    write_to_excel(filtered_data, excel_file_path, "excel_references")
if __name__ == "__main__":
    main()
Antworten Top
#15
...ja und? Dafür hätte es keines Phyton Scripts gebraucht. Vorallem, was hat das jetzt mit der Ausgangsfrage zu tun? Absolut nichts... Oder hab ich die falsch verstanden? Wolltest Du nicht die in den M-Codes angegebenen Quellpfade und -dateien herauslesen?
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste