Clever-Excel-Forum

Normale Version: Excel PQ: Parameter mit Liste als Quelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
In der Funktion Read_Directory war noch ein Fehler. Anstatt den Übergabeparameter zu verwenden hatte ich vom Test noch eine feste Zuordnung für die Funktion Folder.Files verwendet.

Wenn es ein Verzeichnis nicht gibt, dann gibt der Funktionsaufruf einen Fehler zurück. Mir ist s nicht gelungen, diesen in der Abfrage zu löschen oder auszufiltern. Auch meine Versuche, diesen innerhalb der Funktion zu behandeln, waren nich erfolgreich.
(03.12.2022, 09:07)ws-53 schrieb: [ -> ]Wenn es ein Verzeichnis nicht gibt, dann gibt der Funktionsaufruf einen Fehler zurück. Mir ist s nicht gelungen, diesen in der Abfrage zu löschen oder auszufiltern. Auch meine Versuche, diesen innerhalb der Funktion zu behandeln, waren nich erfolgreich.

Dieses Problem habe ich mit folgender Konstruktion gelöst:
Code:
let
    Quelle = (Import_Directory as text) => let
        Source = try Folder.Files(Import_Directory) otherwise "gibt's nicht"
    in
        Source
in
    Quelle
Wenn ich jetzt Unsinn beim Funktionsaufruf eingebe, kommt die Meldung 'gibt's nicht' zurück...

Mal sehen, ob ich mit Deinem Ansatz die vermaledeite Formula.Firewall befrieden kann... Danke für Deinen Beitrag!

Gruß und Dank,
RaiSta
Da "try" naheliegend war, hatte ich es damit zuerst versucht. Ich erhalte aber nach swie vor die Fehlermeldung: DataSource.NotFound: File or Folder: Der Ordner "c:\cef-daten\*" wurde nicht gefunden.

Insofern scheint es wohl an der Version zu liegen. Ich habe: 2.112.204.0 64 Bit (Datei > Optionen und Einstellungen > Abfrageoptionen > GLOBAL > Diagnose).
(05.12.2022, 00:12)ws-53 schrieb: [ -> ][...] Ich erhalte aber nach swie vor die Fehlermeldung: DataSource.NotFound: File or Folder: Der Ordner "c:\cef-daten\*" wurde nicht gefunden.

Insofern scheint es wohl an der Version zu liegen. Ich habe: 2.112.204.0 64 Bit (Datei > Optionen und Einstellungen > Abfrageoptionen > GLOBAL > Diagnose).

Ne, liegt weder an der Version noch einer Fehlfunktion Deiner Umgebung... ich habe nur nicht ausreichend getestet:
  • = Read_Directory("abc") --> "gibt's nicht"
  • = Read_Directory("c:\abc") --> DataSource.NotFound: ...
Somit ist auch auf meinem System das Verhalten so, wie von Dir berichtet. Nur 'sinnloser' Text führt zur Reaktion des 'try', sobald etwas formal wie ein Verzeichnis aussieht, reagiert PQ pienzig und jammert rum: das 'try' nutzt dann nix mehr.

Irgendwie schwach, dass es scheinbar keine Möglichkeit gibt, ein ungültiges Verzeichnis ordentlich abzufangen.

Gruß und Dank,
RaiSta
Es ist eigentlich noch viel schlimmer. Ich habe es mit „Folder.Files("C:\") versucht und erhalte die Fehlermeldung das der Ordner: "C:\Program Files\Microsoft Office\root\vfs\Common AppData" nicht gefunden wurde. Habe ich diesen angelegt, fehlt dann : "…\Gemeinsame Anwendungsdaten\".

Nach dem ich auf meinen Laptop mittlerweile rund ein Dutzend Verzeichnisse angelegt habe, fehlt nun eine "…\AppCrash_WifiTask.exe_50…"

Somit scheint es so zu sein, dass PQ ein internes Systemverzeichnis ausliest und den Inhalt mit dem vergleicht, was tatsächlich vorhanden ist. Fehlt etwas kommt ein "Error", der sich in der Abfrage nicht beheben lässt.

Ich wollte eigentlich das ganze Laufwerk auslesen, um prüfen zu können, ob die angegebenen Verzeichnisse vorhanden sind. Vermutlich geht es wenn es sich nicht um das Systemlaufwerk handelt. Aber wenn es das Laufwerk nicht gibt, dann führt dies immer noch zu einem Fehler (DataSource.Error: E/A-Fehler "21" beim Zugriff auf den Pfad "E:\*".), der mit "try" nicht übergangen werden kann.

Aber du hast noch nicht mitgeteilt, ob mit der neuen Methode das "Firewall-Problem" nun behoben ist.


Wobei es auch noch einfacher geht, indem du die Liste der Verzeichnisse und Files als Input einer neuen Abfrage verwendest und dann ein "benutzerdefiniertes Feld" anlegst und dabei dann den Befehl: "Folder.Files"([Verzeichnis] & [Datei])" verwendest, wobei natürlich für: "Verzeichnis" und "Datei" deine Feldnamen verwenden musst.

Nachtrag: Wegen des Problems mit: Folder.Files("C:\") habe ich eine Beitrag auf excelguru.ca eingestellt, da Ken Puls einen direkten Draht zu den Entwicklern hat. Mal sehen, ob ich da eine Antowrt bekomme und sich womöglich das Problem auch beheben lässt.
(05.12.2022, 11:37)ws-53 schrieb: [ -> ]Es ist eigentlich noch viel schlimmer. Ich habe es mit „Folder.Files("C:\") versucht und erhalte die Fehlermeldung das der Ordner: "C:\Program Files\Microsoft Office\root\vfs\Common AppData" nicht gefunden wurde. Habe ich diesen angelegt, fehlt dann : "…\Gemeinsame Anwendungsdaten\".
[...]
Somit scheint es so zu sein, dass PQ ein internes Systemverzeichnis ausliest und den Inhalt mit dem vergleicht, was tatsächlich vorhanden ist. Fehlt etwas kommt ein "Error", der sich in der Abfrage nicht beheben lässt.
Ich wollte eigentlich das ganze Laufwerk auslesen, um prüfen zu können, ob die angegebenen Verzeichnisse vorhanden sind. Vermutlich geht es wenn es sich nicht um das Systemlaufwerk handelt. Aber wenn es das Laufwerk nicht gibt, dann führt dies immer noch zu einem Fehler (DataSource.Error: E/A-Fehler "21" beim Zugriff auf den Pfad "E:\*".), der mit "try" nicht übergangen werden kann.
Oh, so weit war ich nicht gediehen bei meinen Tests, mit "C:\", hatte ich festgestellt, dass die Funktion erst mal arbeitet. Allerdings kann ich mich dunkel erinnern, dass PQ auch mit irgendeinem komischen Pfad rumgejammert hat - ohne dass ich hier näher 'drauf eingegangen wäre.

Hier scheint sich noch ein Abgrund an unvollständig gelösten Aufgaben aufzutun... in mehrfacher Hinsicht
  • Umgang mit Verzeichnissen, die es nicht gibt
  • Umgang mit C:\ (und anderen Root-Verzeichnissen? Wie läuft es auf Netzlaufwerken / SharePoint / ... ?)
Sprich: so richtig bis zu Ende durchdacht scheint mir das Ganze noch nicht. Oder wir wissen nur noch nicht, wie's richtig geht???

(05.12.2022, 11:37)ws-53 schrieb: [ -> ]Aber du hast noch nicht mitgeteilt, ob mit der neuen Methode das "Firewall-Problem" nun behoben ist.
Seit wenigen Minuten kann ich ersten Vollzug melden - mit einer Function, die halt dann doch die einzelnen Einträge ausliest, habe ich hier PQ ruhigstellen können. Das scheint zu gehen

(05.12.2022, 11:37)ws-53 schrieb: [ -> ][...] die Liste der Verzeichnisse und Files als Input einer neuen Abfrage verwendest und dann ein "benutzerdefiniertes Feld" anlegst und dabei dann den Befehl: "Folder.Files"([Verzeichnis] & [Datei])" verwendest, wobei natürlich für: "Verzeichnis" und "Datei" deine Feldnamen verwenden musst.
Ich fürchte, dass es genau an dieser Stelle dann wieder zur Firewall-Meldung kommt, da PQ dann bemängelt, dass die Feldnamen aus einer anderen Quelle kämen und so nicht verwendet werden dürften. Genau damit hatte ich ja zu kämpfen...

Gruß und Dank,
RaiSta
Ich verwende folgenden M-Code, um zu testen, ob ein Verzeichnis existiert
Code:
let
    absoluteFolderPath = "C:\tmp\",
    folderContentsOrError = Table.Buffer(Folder.Contents(absoluteFolderPath)),
    alternativeResult = """" & absoluteFolderPath & """ is not a valid folder path",
    result = try folderContentsOrError otherwise alternativeResult
in
    result
(05.12.2022, 12:23)DeltaX schrieb: [ -> ]Ich verwende folgenden M-Code, um zu testen, ob ein Verzeichnis existiert
[...]
Habe gemäß des Vorschlags von ws-53 Deinen Vorschlag in die Funktion eingebaut:
Code:
let
    Quelle = (Import_Directory as text) => let
        folderContentsOrError = Table.Buffer(Folder.Contents(Import_Directory)),
        alternativeResult = """" & Import_Directory & """ is not a valid folder path",
        result = try folderContentsOrError otherwise alternativeResult
    in
        result
in
    Quelle
Die leistet erst mal ziemlich genau das, was ich von der Funktion erwarten würde und ist auch 'immun' gegen ungültige Pfade. Ob sich damit das von ws-53 geschilderte Problem mit C:\ final beheben lässt, weiß ich noch nicht, müsste ws-53 auf seinem System testen. Bei mir gibt's jedenfalls kein Problem damit.

Die Funktion lässt sich natürlich noch ausbauen.

17 Schöne Idee! Danke für's Teilen! Idea

Gruß und Dank,
RaiSta
Zitat:Ob sich damit das von ws-53 geschilderte Problem mit C:\ final beheben lässt, weiß ich noch nicht, müsste ws-53 auf seinem System testen. Bei mir gibt's jedenfalls kein Problem damit.

Nein, es lässt sich damit nicht beheben. Zumal ich ja ein gesamtes Verzeichnis/Laufwerk auslesen wollte und somit "Folder.Files" anstatt "Folder.Contents" verwenden muss.

Der Code:

Code:
let
    Quelle = (Import_Directory as text) => let
        folderContentsOrError = Table.Buffer(Folder.Files(Import_Directory)),
        alternativeResult = """" & Import_Directory & """ is not a valid folder path",
        result = try folderContentsOrError otherwise alternativeResult
    in
        result
in
    Quelle

Funktioniert mit "D:\". Aber wenn ich diesen für "C:\" laufen lassen will, erhalte ich die Meldung: "C:\" is not a valid folder path
Hallo WS-53,

bei mir funktioniert das Auslesen der Festplatte 'C:\' (Win.10 / 22H2) auch nicht und ich finde das gut so - auf dem System-LW haben solche General-Angriffe zu unterbleiben und das Betriebssystem muß dafür gerüstet sein, solche Manöver abzublocken.

Gruß von Luschi
aus klein-Paris
Seiten: 1 2 3