Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel PQ: Parameter mit Liste als Quelle
#11
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.


Angehängte Dateien
.xlsx   cef - Parameter mit Liste als Quelle (PQ).xlsx (Größe: 22,33 KB / Downloads: 9)
Antworten Top
#12
(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
Antworten Top
#13
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).
Antworten Top
#14
(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
 Man(n) ist nie zu alt für die Erkenntnis, dass das bisher Gelernte doch nur bedingt gültig oder auch nur brauchbar ist. 27
Antworten Top
#15
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.
Antworten Top
#16
(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
 Man(n) ist nie zu alt für die Erkenntnis, dass das bisher Gelernte doch nur bedingt gültig oder auch nur brauchbar ist. 27
Antworten Top
#17
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
[-] Folgende(r) 1 Nutzer sagt Danke an DeltaX für diesen Beitrag:
  • RaiSta
Antworten Top
#18
(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
 Man(n) ist nie zu alt für die Erkenntnis, dass das bisher Gelernte doch nur bedingt gültig oder auch nur brauchbar ist. 27
Antworten Top
#19
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
Antworten Top
#20
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
Antworten Top


Gehe zu:


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