WinFuture-Forum.de: Powershell Script für Excel - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Powershell Script für Excel


#1 Mitglied ist offline   Hamburg69 

  • Gruppe: Mitglieder
  • Beiträge: 9
  • Beigetreten: 12. August 16
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 12. August 2016 - 11:45

Hallo Leute ich bin neu in dem IT wesen und hoffe das ihr mir helfen könnt.
Ich soll ein Script für Excel schreiben über Powershell.

Mein Problem ist das für jeden Tag Tabellen kriegen in csv Format wo Datum und Uhrzeit und die Überprüfungstyp im Name steht. Das Script was ich schreiben soll, soll immer auf das Aktuellste Datum mit zurzeit zugreifen, leider habe ich noch keine Idee und habe auch im Netz schon geschaut nach Scripts aber was ich gefunden habe kann ich nix mit anfangen vielleicht sagt euch das Script was .

$LastFile = *_DailyFile
$compareDate = (Get-Date).AddDays(-1)
$LastFileCaptured = Get-ChildItem -Recurse | Where-Object {$LastFile.LastWriteTime
-ge $compareDate}

Die Datei von mir heißt zb. 2016-07-31-09-16_S12_Sum_Komplett.csv
und am folge tag heißt es 2016-08-01-12-16_S12_Sum_Komplett.csv

Würde mich freuen wenn ihr mir helfen könnt.

Grüße Hamburg69
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 12. August 2016 - 15:52

Das geht mit PS sehr viel einfacher:

- Per Get-ChildItem die Dateien durchforsten (mit -Recurse nur, wenn Unterverzeichnisse auch da sind/durchsucht warden sollen)
- Die Chose durch Sort-Object filtern. Dabei mit -Property dasjenige Feld angeben, wonach sortiert warden soll; mit -Descending absteigend, ohne oder mit -Descending:$false aufsteigend

- Das Ergebnis nochmal in Select-Object reinfüttern und mit -First <n> (oder auch -Last <n>) die ersten (bzw letzten) n Treffer auswählen.

Zusammen also:

 Get-ChildItem -Recurse -Path '*.csv' |
   Sort-Object -Property LastWriteTime -Descending:$true |
   Select-Object -First 1



Das würde Dir aus dem aktuellen Pfad diejenige CSV-Datei raussuchen, die zuletzt geschrieben wurde.

- Statt LastWriteTime als -Property geht ggf auch BaseName. Das ist der blanke Dateiname (ohne Pfad). So wie ich das lese, könntest Du den auch verwenden, bei selber Sortierung.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Hamburg69 

  • Gruppe: Mitglieder
  • Beiträge: 9
  • Beigetreten: 12. August 16
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 15. August 2016 - 05:44

Hallo RalphS

danke für die schnelle Antwort. Leider habe ich bei mir noch ein Fehler drin, er soll ja auf ein bestimmten Ordner zugreifen und dein bsp eingefügt aber glaube das ich es mir zu einfach gemacht habe und habe es das Wochenende ausprobiert und weiß nicht was ich genau ändern muss.

$quelle = 'D:\Excel\.csv'

$objExcel = New-Object -Com Excel.Application

$LastFile = *_DailyFile
$compareDate = (Get-Date).AddDays(-1)
$LastFileCaptured =Get-ChildItem -Recurse -Path '*.csv' |
Sort-Object -Property LastWriteTime -Descending:$true |
Select-Object -First 1

sry ist bestimmt einfach zu ändern aber ich komme leider nicht drauf

mfg
0

#4 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 15. August 2016 - 08:06

Also ich sehe schonmal oben, bei der Zuweisung für die Variable »$quelle«, dass der Platzhalter * fehlt und dann denke ich, müßte doch irgendwo im Script die Variable $quelle ja auch mal vorkommen, sonst macht die ja keinen Sinn. Wahrscheinlich anstatt '*.csv' aber Shellscripte kann ich eigentlich nicht.

Dieser Beitrag wurde von Holger_N bearbeitet: 15. August 2016 - 08:07

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#5 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 15. August 2016 - 08:36

So isses, Holger. Alleine ist die Variable $quelle total sinnlos, schließlich muss man dem Script noch erzählen, wo es die Dateien zu suchen hat.

So könntes passen:
$quelle = 'D:\Excel\*.csv' 

$objExcel = New-Object -Com Excel.Application 

$LastFile = *_DailyFile
$compareDate = (Get-Date).AddDays(-1)
$LastFileCaptured =Get-ChildItem -Recurse -Path '$quelle' |
Sort-Object -Property LastWriteTime -Descending:$true |
Select-Object -First 1

«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#6 Mitglied ist offline   Hamburg69 

  • Gruppe: Mitglieder
  • Beiträge: 9
  • Beigetreten: 12. August 16
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 15. August 2016 - 08:58

danke schon mal für die Hilfe habe es getestet
und leider zeigt er mir ein Fehler bei

$LastFile = *_DailyFile

und wüsste nicht was ich noch eintragen könnte für , den anderen Fehler habe ich lösen können.

Dieser Beitrag wurde von Hamburg69 bearbeitet: 15. August 2016 - 09:08

0

#7 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 15. August 2016 - 10:31

Schön, dass du uns verrätst, welche Fehler auftreten [/sarcasm]

Ich kann hier mangels Powershell nicht testen, aber es sieht so aus, als müssten alle Befehle in dem fraglichen Verzeichnis ausgeführt werden.

Füge mal vor dem $LastFile=... ein cd $quelle ein und mach die andere Änderung rückgängig
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#8 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 15. August 2016 - 10:56

Wenn das so laufen soll wie oben:

PS ist OBJEKTorientiert. So Späße wie $x = *.txt geht damit nicht.

Stattdessen:

$variable = Get-ChildItem -Path '*.txt' -Recurse:<$true|$false>


"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#9 Mitglied ist offline   Hamburg69 

  • Gruppe: Mitglieder
  • Beiträge: 9
  • Beigetreten: 12. August 16
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 15. August 2016 - 12:31

danke schön

gibt es zufällig ein Befehl das man was in Spalte D ist in Spalte A verschieben kann so dass die anderen nach rechts weiter rücken.

grüße

Dieser Beitrag wurde von Hamburg69 bearbeitet: 16. August 2016 - 14:04

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0