¿Cómo puedo organizar automáticamente los datos de un archivo de texto en una hoja de cálculo?

¿Cómo puedo organizar automáticamente los datos de un archivo de texto en una hoja de cálculo?

Tengo un archivo de texto como este:

datos sin procesar

y me gustaría organizarlo en Excel así:

datos de excel

Podría hacer esto manualmente para dos entradas de datos, pero me gustaría poder automatizarlo a mayor escala. Lo que he intentado hasta ahora es ingresar los datos en Excel usando su función incorporada, pero ahí es donde estoy estancado. Intenté transponer las columnas en filas, pero eso no las organiza claramente como quiero. ¿Necesito hacer algo de codificación o hay una función incorporada? Si necesito codificación, ¿alguien podría indicarme la dirección correcta?

¡Gracias por tu tiempo!

Respuesta1

Probaría el complemento Power Query para esto. Tiene poderosos comandos para manipular datos. Hay funciones debajo, pero puede lograr muchas cosas con solo hacer clic en los botones en la ventana de Power Query. Trabajar visualmente en Power Query suele ser mucho más fácil que codificar en VBA.

Probé este desafío en particular y lo hice funcionar. Puedes descargar y usar mi archivo de demostración desde mi OneDrive:

http://1drv.ms/1AzPAZp

Es el archivo: Demostración de Power Query: reorganización de filas en columnas.xlsx

Como se describe en la hoja Léame, solo tuve que escribir una función simple; el resto fue simplemente hacer clic en la interfaz de usuario. ¡Power Query es genial!

Para usarlo en sus propios archivos de texto, simplemente edite el primer paso de la consulta para que apunte a su archivo. Por cierto, incluso puede hacer que Power Query recorra los archivos en una carpeta si es necesario.

Respuesta2

Powershell de forma sucia.

$xlsFile="c:\temp\your.xlsx"
$excel = new-object -comobject excel.application
$excel.displayAlerts = $false
$wbs=$excel.workbooks.open($xlsFile)
$ws=$wbs.sheets.item(1)
$ws.cells.item(1,1) = "Customer"
$ws.cells.item(1,2) = "Apples"
$ws.cells.item(1,3) = "Bananas"
$ws.cells.item(1,4) = "Oranges"
$row = 1
$reader = [System.IO.File]::OpenText("c:\temp\your.txt")
try {
    while ($true) {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }
        if ($line.length -lt 3) {continue}
        switch ($line.substring(0,3))
            {
                "Cus" {
                    $val="'"+$line.split("#:")[1]
                    $row++
                    $ws.cells.item($row,1) = $val
                }
                "App" {
                    $val=$line.split(" ")[1]
                    $ws.cells.item($row,2) = $val
                }
                "Ban" {
                    $val=$line.split(" ")[1]
                    $ws.cells.item($row,3) = $val              
                }
                "Ora" {
                    $val=$line.split(" ")[1]
                    $ws.cells.item($row,4) = $val
                }
            }
    }
}
finally {
    $reader.Close()
}
$wbs.saveas($xlsFile)
$wbs.close()
$excel.quit()
$ws = $null
$wbs = $null
$excel = $null

información relacionada