
Ich habe etwa 40–50 Excel-Dateien, die in den ersten 20 x 25 Zellen nützliche Informationen enthalten, aber dahinter Datenmüll. Was ist der einfachste Weg, um den Datenmüll auf einen Schlag aus allen Dateien zu entfernen, sodass nur die ersten 20 x 25 Zellen übrig bleiben? Kann ich dies mit Powershell unter Windows tun?
Antwort1
Der einfachste Weg, dies zu tun, ist meiner Meinung nach ein VBA-Makro in Excel:
Sub CleanFiles()
' for each file in a directory
' open it, delete all cell content around the first 20x25 cells, write it back
' 2015-10-15
Dim path As String, aFile As String
Dim arr As Variant
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.EnableEvents = False
path = "D:\TEMP\xls\" ' must have trailing backslash
aFile = Dir(path & "*.xls")
Do While aFile <> ""
Application.StatusBar = aFile
aFile = path & aFile
Workbooks.Open (aFile)
' process file content
arr = ActiveSheet.Range("A1:Y20")
Cells.Clear
ActiveSheet.Range("A1:Y20") = arr
' save and close WB
ActiveWorkbook.Close True, aFile
aFile = Dir
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableEvents = False
Application.StatusBar = False
End Sub
Zunächst werden Bildschirmaktualisierungen und Automakros deaktiviert. Anschließend wird ein bestimmter Ordner nach *.xls-Dateien durchsucht und die einzelnen Dateien geöffnet. Der Inhalt des zu speichernden Bereichs wird intern gespeichert, anschließend wird das gesamte Blatt geleert und der Inhalt wieder in das Blatt geschrieben. Beim Schließen der Datei wird diese ohne Nachfrage gespeichert.
Antwort2
Sie könnten a ausführen, Get-Content file.csv | select -First 25 | Export-Csv newfile.csv
wenn Sie die ersten 20-25 Zeilen meinen. Sie könnten a ausführen Get-Content -Header @("a","b","c") file.csv | Select a,b,c | Export-Csv newfile.csv
und so weiter in dieser Reihenfolge, um bis y alles auszuwählen, was Ihre 25. Spalte wäre. Es könnte jedoch einen besseren Weg geben.