Excel-Datei mit Powershell oder VBA auslesen und in einer anderen Excel-Datei schreiben
Hallo zusammen,
ich habe ein kleines Problem wo ich einfach nicht weiterkomme. Es gibt im Netz genügend Beispiele aber ich habe es bis jetzt nicht so hinbekommen, dass es für mich praktisch wäre.
Ich habe zwei Excel-Dateien A und B und ich müsste von A Dateien aus einem bestimmten Bereich auslesen,deren Zeilenanzahl aber variabel ist und diese Werte in der Excel-Datei B schreiben.
Also ich suche einen Wert z.B 2021 aus der Spalte A,B und C aber nur bis 2021 und nicht weiter. Da komme ich mit dem
Range Befehl nicht weiter, da sich die Zeilenanzahl immer wieder mal ändert.
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2022 ULM OTTO
2022 ULM OTTO
2022 ULM OTTO
ich bräuchte wohl eine Schleife und ein Array dafür......
Vielleicht hat ja jemand eine Idee wie man das Umsetzen könnte
danke euch
ich habe ein kleines Problem wo ich einfach nicht weiterkomme. Es gibt im Netz genügend Beispiele aber ich habe es bis jetzt nicht so hinbekommen, dass es für mich praktisch wäre.
Ich habe zwei Excel-Dateien A und B und ich müsste von A Dateien aus einem bestimmten Bereich auslesen,deren Zeilenanzahl aber variabel ist und diese Werte in der Excel-Datei B schreiben.
Also ich suche einen Wert z.B 2021 aus der Spalte A,B und C aber nur bis 2021 und nicht weiter. Da komme ich mit dem
Range Befehl nicht weiter, da sich die Zeilenanzahl immer wieder mal ändert.
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2021 ULM OTTO
2022 ULM OTTO
2022 ULM OTTO
2022 ULM OTTO
ich bräuchte wohl eine Schleife und ein Array dafür......
Vielleicht hat ja jemand eine Idee wie man das Umsetzen könnte
danke euch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4504459639
Url: https://administrator.de/contentid/4504459639
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
9 Kommentare
Neuester Kommentar
Moin.
bsp. mit VBA im ersten Workbook
Oder Quell CSV
und Powershell
uk.
bsp. mit VBA im ersten Workbook
Sub Gefiltert_kopiert()
Dim otherWorkbook As Workbook
Set otherWorkbook = Workbooks.Open("C:\daten\Mappe2.xlsx")
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(1)
If .AutoFilterMode = True Then .AutoFilterMode = False
With .UsedRange
.AutoFilter 1, "2021"
.Offset(1, 0).SpecialCells(xlCellTypeVisible).Copy Destination:=otherWorkbook.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
End With
.AutoFilterMode = False
End With
otherWorkbook.Close True
Application.ScreenUpdating = True
End Sub
Oder Quell CSV
und Powershell
Import-CSV "D:\data\quelle.csv" -Delimiter ";" | ?{$_.Jahr -eq '2021'} | export-csv "D:\data\ziel.csv" -Delimiter ";" -NoTypeinformation -Encoding UTF8
?? Zum Anhängen der Daten an eine bestehende CSV einfach den Parameter -Append von Export-CSV verwenden.
Genau das macht der erste Code oben ja
Moin Mike,
mit Powershell wie folgt:
Alternativ kannst du die Zieldatei natürlich auch am geöffnet lassen und einfach mit folgender Zeile Excel sichtbar machen:
Gruß Thomas
mit Powershell wie folgt:
# Quell- und Zieldatei
$Source = 'C:\Pfad\zur\Quelldatei.xlsx'
$Target = 'C:\Pfad\zur\Ausgabedatei.xlsx'
# Excel öffnen
$XL = New-Object -ComObject Excel.Application
# Interaktive Meldungen deaktivieren
$XL.DisplayAlerts = $false
# Mappen öffnen
$SourceBook = $XL.Workbooks.Open($Source,0,$true)
$TargetBook = $XL.Workbooks.Add()
# Zeilen, bei denen SpalteA=2021
$Rows = $SourceBook.ActiveSheet.UsedRange.Rows | Where-Object {$_.Columns["A"].Value2 -eq "2021"}
# Kopiere Zeilen in Zieldatei
For ($i=1;$i -le $Rows.Count;$i++) { [void]$Rows[$i-1].Copy($TargetBook.ActiveSheet.Rows($i)) }
# Zieldatei speichern
$TargetBook.SaveAs($Target)
# Arbeitsmappen schließen
$SourceBook.Close()
$TargetBook.Close()
# Bereitstellung der Comobjekte aufheben
do {$i = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($XL)} until ($i -le 0)
rv XL,SourceBook,TargetBook,Rows,i
Alternativ kannst du die Zieldatei natürlich auch am geöffnet lassen und einfach mit folgender Zeile Excel sichtbar machen:
$XL.Visible = $true
Gruß Thomas
Moin,
Die Variable $XL in meinem Skript ist natürlich erst mal nur das Excel-Programm.
Du willst ein Blatt einer Mappe lesen - also solltest du natürlich besser die Variable der entsprechenden Mappe (in meinem Skript oben z.B. $SourceBook) zu nutzen - sonst hast du bei mehreren geöffneten Mappen ggfs. das Problem, das mehrere Sheets existieren die "Tabelle1" heissen. Meine favorisierte Syntax sieht so aus:
Es empfiehlt sich natürlich (wie eigentlich immer in Powershell), das Ganze mal Schritt für Schritt in der Konsole zu machen und dort einfach auch mal ein bisschen rum zu experimentieren, statt es einfach nur als Skript laufen zu lassen.
Gruß Thomas
Zitat von @Fat.Mike:
Bei meiner Mappe habe ich mehrere Blätter und jetzt versuch ich ein bestimmtes Blatt auszulesen. Ich dachte das geht mit "$XL.Sheets.Item("Tabelle1") oder WorkSheets.item(2)
das geht so auch, ABER:Bei meiner Mappe habe ich mehrere Blätter und jetzt versuch ich ein bestimmtes Blatt auszulesen. Ich dachte das geht mit "$XL.Sheets.Item("Tabelle1") oder WorkSheets.item(2)
Die Variable $XL in meinem Skript ist natürlich erst mal nur das Excel-Programm.
Du willst ein Blatt einer Mappe lesen - also solltest du natürlich besser die Variable der entsprechenden Mappe (in meinem Skript oben z.B. $SourceBook) zu nutzen - sonst hast du bei mehreren geöffneten Mappen ggfs. das Problem, das mehrere Sheets existieren die "Tabelle1" heissen. Meine favorisierte Syntax sieht so aus:
$SourceBook.Worksheets["Tabelle1"]
Vielleicht kennt ja jemand ein gutes Tutoriel für mich
gibt es haufenweise, z.B.: techexpert.tips/de/powershell-de/powershell-erstellen-einer-excel-tabelle/Es empfiehlt sich natürlich (wie eigentlich immer in Powershell), das Ganze mal Schritt für Schritt in der Konsole zu machen und dort einfach auch mal ein bisschen rum zu experimentieren, statt es einfach nur als Skript laufen zu lassen.
Gruß Thomas