
Tengo entre 40 y 50 archivos de Excel que tienen información útil en las primeras celdas de 20x25 y luego basura más allá de estas celdas. ¿Cuál es la forma más sencilla de limpiar la basura de todos los archivos de una sola vez, de modo que solo queden las primeras celdas de 20x25? ¿Puedo hacer esto usando Powershell en Windows?
Respuesta1
En mi humilde opinión, la forma más sencilla de hacer esto es una macro VBA en 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
Primero, la actualización de pantalla y las macros automáticas están deshabilitadas. Luego, se escanea una carpeta específica en busca de archivos '*.xls' y se abre cada archivo. El contenido del área que se va a conservar se guarda internamente, luego se borra toda la hoja y el contenido se vuelve a escribir en la hoja. Al cerrar el archivo, se guarda sin que se le solicite.
Respuesta2
Podrías hacer Get-Content file.csv | select -First 25 | Export-Csv newfile.csv
si te refieres a las primeras 20-25 filas. Podrías hacer a Get-Content -Header @("a","b","c") file.csv | Select a,b,c | Export-Csv newfile.csv
y así sucesivamente en ese orden para seleccionar hasta y, que sería tu columna número 25. Aunque podría haber una manera mejor.