none
Ordner Sortieren RRS feed

  • Frage

  • Erst mal ein schönes Hallo,

    ich hoffe das ihr mir helfen könnt,

    ich habe ein Ordner mit dem Pfad C:\Benutzer\Test\  wo Täglich 4 .csv Dateien dazu kommen.

    Ich würde gerne über dem Script das er die Dateien sortiert und die 4 Aktuellsten oben stehen und dann öffnet in eine Excel Datei mit 4 Mappen dann.

                           Vorher

    Nachher

    Ich habe auch schon angefangen mit dem Script, aber leider zieht er sich alle Dateien die in dem Ordner stehen in die Excel Datei. Brauche ja nur die 4 Aktuellsten von dem Tag.

    # Alle CSV-Dateien des Ordners in ein neues Sheet importieren 
    #initiale Anzahl an sheets speichern 
    $initcount = [int]$wb.Worksheets.Count 
    gci $quelle | %{ 
        $ws = $wb.Worksheets.Add($n,$wb.Worksheets.Item($wb.Worksheets.Count),$n,$n) 
        $ws.Name = $_.Name 
        $qt = $ws.QueryTables.Add("TEXT;$($_.Fullname)",$ws.Range("A1")) 
        $qt.Name = "Import" 
        $qt.FieldNames = $true 
        $qt.AdjustColumnWidth = $true 
        $qt.TextFilePlatform = 1252 
        $qt.TextFileStartRow = 1 
        $qt.TextFileParseType = 1 
        $qt.TextFileSemicolonDelimiter = $true 
        $qt.Refresh($false) 
        $qt.Delete() 
    } 

    

    Donnerstag, 8. September 2016 11:29

Antworten

  •  

    Ersetze die zweite Zeile mit:

    gci $quelle -File | sort CreationTime -Descending  | select -First 4 | %{

    Dies sortiert erst nach dem CreationTime-Attribut und wählt dann die ersten 4 aus. Falls es manchmal auch Tage mit weniger als 4 neuen Dateien gibt und du dann nur die von diesem Tag benötigst, müsste man das noch einbauen.


    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Kostenloser Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Donnerstag, 8. September 2016 11:46
    Moderator

Alle Antworten

  •  

    Ersetze die zweite Zeile mit:

    gci $quelle -File | sort CreationTime -Descending  | select -First 4 | %{

    Dies sortiert erst nach dem CreationTime-Attribut und wählt dann die ersten 4 aus. Falls es manchmal auch Tage mit weniger als 4 neuen Dateien gibt und du dann nur die von diesem Tag benötigst, müsste man das noch einbauen.


    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Kostenloser Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Donnerstag, 8. September 2016 11:46
    Moderator
  • danke habe es gerade getest aber leider nimmt er keine Datei rein und öffnet mir nur ein Excel Blatt mit namen Tabelle 3
    Donnerstag, 8. September 2016 12:25
  • Also wenn das was du oben gepostet hast, vorher funktioniert hat, muß das jetzt auch gehen. Die Daten die an die Pipeline geschickt werden sind die gleichen. Check noch mal ob du keinen Fehler gemacht hast. Ansonsten müsstest du mal das ganze Skript posten.

    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Donnerstag, 8. September 2016 12:58
    Moderator
  • # Quelldateien 
    $quelle = 'D:\Excel\*.csv' 
    
    # Zieldatei 
    $ziel = "D:\Excel\.xlsx" 
    
    # Excel Objekt 
    $objExcel = New-Object -Com Excel.Application 
    
    # platzhalter für leere Parameter 
    $n = [System.Reflection.Missing]::Value 
    
    # Neue Mappe öffnen 
    $wb = $objExcel.Workbooks.Add() 
    
    # Excel anzeigen 
    $objExcel.Visible = $true 
    
    # Meldungen abschalten 
    $objExcel.DisplayAlerts = $false 
    
    # Ale CSV-Dateien des Ordners in ein neues Sheet importieren 
    #initiale Anzahl an sheets speichern 
    $initcount = [int]$wb.Worksheets.Count 
    gci $quelle -File | sort CreationTime -Descending  | select -First 4 | %{
        $ws = $wb.Worksheets.Add($n,$wb.Worksheets.Item($wb.Worksheets.Count),$n,$n) 
        $qt = $ws.QueryTables.Add("TEXT;$($_.Fullname)",$ws.Range("A1")) 
        $qt.Name = "Import" 
        $qt.FieldNames = $true 
        $qt.AdjustColumnWidth = $true 
        $qt.TextFilePlatform = 1252 
        $qt.TextFileStartRow = 1 
        $qt.TextFileParseType = 1 
        $qt.TextFileSemicolonDelimiter = $true 
        $qt.Refresh($false) 
        $qt.Delete() 
    } 
    
    das ist der Anfang vom Skript hoffe das es reicht
    Dienstag, 13. September 2016 11:52
  • Der Code so wie du Ihn oben gepostet hast, klappt bei mir wie erwartet. Die vier zuletzt bearbeiteten CSVs werden je in einem Excel-Tabellenblatt geöffnet.

    Wie gesagt, da sich nur die Auswahl der Dateien geändert hat, muß es einen Grund außerhalb des Scriptes geben, wenn es jetzt nicht mehr funktioniert. Außer fehlenden Rechten, gesperrten Dateien, gibts da eigentlich nur noch: keine Dateien. Probier doch mal nur :

    gci $quelle -File | sort CreationTime -Descending  | select -First 4
           


    um zu sehen ob überhaupt Dateien gefunden werden (vergiss nicht $quelle einen Wert zu geben).


    > ein Excel Blatt mit namen Tabelle 3
     

    Unabhängig von obigem Problem, das hier:

    $qt.Name = "Import" 

    ...benennt nicht das Tabellenblatt (Tabelle 1,Tabelle 2 ...), das weisst du, oder? Das Tabellenblatt kannst du z.b. mit dem Filenamen benennen, indem du in die Zeile nach "..worksheets.add..", folgendes einfügst:

     
    $ws.Name = $_.BaseName
     
    Es darf kein fester Wert wie "Import" sein, da es keine Tabellenblätter mit gleichem Namen geben darf.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Dienstag, 13. September 2016 12:32
    Moderator
  • Also bei mir tut sich nix , ich bin gerade auch voll überfragt wo jetzt der Fehler ist

    Wie meinst du das mit dem namen ändern weil das wird später über 

    
    $ws.Name = "S6"

    gemacht. Wie meinst du das mit dem festem Wert?

    Dienstag, 13. September 2016 12:48
  •   

    Na ich hab dir ja einen Tipp zur Fehlersuche gegeben. Hast du das gemacht?

    > Wie meinst du das mit dem festem Wert?

    $ws.Name = "S6"

     
    genau
    das ist ein fester Wert, nämlich "S6".  Der ist immer gleich und ändert sich nicht. Es kann aber nur ein Tabellenblatt geben das S6 heisst, beim Versuch ein weiteres so zu nennen, kommt ein Fehler (sieht man nicht) und das Blatt wird "Tabelle n" genannt. 
    Ergo muß da ein variabler Wert hin, einer der sich bei jedem Durchlauf, für jedes Blatt ändert. Eine Möglichkeit wäre mein Vorschlag, die Benennung nach Dateinamen.


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Dienstag, 13. September 2016 13:18
    Moderator
  • ich habe 4 Tabellen eine ist S6,S8,S9,S10

    leider hat mir der tipp nicht geholfen, weil ich gerade nicht weiß was ich alles ändern soll.

    Wie würdest du den mein Script schreiben?

    • Bearbeitet Neuling69 Mittwoch, 14. September 2016 08:16
    Mittwoch, 14. September 2016 06:09
  • Ich würde es so schreiben wie du es oben gepostet hast, weil es bei mir ja funktioniert. :)
    Wir müssen glaube ich, mal was klären, weisst du was das hier bedeutet:
      
    gci $quelle -File | sort CreationTime -Descending  | select -First 4
      
    Grüße, Denniver

     

    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Mittwoch, 14. September 2016 10:52
    Moderator
  • nein weiß ich nicht schaue auch nur auf anderen Foren rum und bastle es zusammen so gut wie ich es kann.
    Mittwoch, 14. September 2016 11:18
  • Ja, das hab ich mir gedacht. Dann kommen wir hier nicht weiter sorry. Ich empfehle dringend dir mal die Powershell Grundlagen anzueignen (sehr zu empfehlen hier die Bücher von Tobias Weltner), weil du ohne diese, immer wieder vor scheinbar unlösbaren Problemen stehen wirst.

    Unabhängig davon, nochmal zusammengefasst: Das Script das du oben gepostet hast, funktioniert. Wenn es bei dir nicht geht, werden entweder keine CSV-Dateien (Pfad richtig?) gefunden oder es gibt ein Problem ausserhalb von Powershell (fehlende Rechte etc.). Wie du das überprüfen kannst, habe ich oben bereits geschrieben. Oder du machst irgend einen anderen simplen Fehler, denn man gleich sehen würde wenn man dir beim Ausführen über die Schulter schauen würde. In einem Forum geht das aber nunmal nicht.

    Du kannst hier auch jederzeit wieder gerne Fragen stellen, aber ohne die Grundlagen wird das ganze für dich eher frustierend.
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Mittwoch, 14. September 2016 14:45
    Moderator