¿Cómo convierto una lista delimitada en una tabla de varias columnas en Excel?

3

Tengo una lista como esta:

Friut;Taste;Color;Other;Apple;Good;Red and Blue;1;Orange;Really Good;Orange;12

Y quiero convertirlo seleccionando cada 4 delimitaciones y convirtiéndolas en filas como esta:

Fruit    Taste     Color     Other
Apple    Good      Red and G.1
Orange   Really Go.Orange    12

¿Cómo es esto posible con Libreoffice (preferido), Openoffice o Excel?

Editar: lo anterior es un ejemplo. Lo estoy usando para seleccionar 4 delimitaciones, pero hay alrededor de 500 filas en las que necesito que funcione.

Edit2: proporcioné mi propia respuesta (correcta)

Stonewareslord
fuente
2
Sería más fácil hacer esto con algo como Perl o sed. echo "Your string" | perl -pe 's/([^;]*);([^;]*);([^;]*);([^;]*);?/$1,$2,$3,$4\n/g'e importar el resultado como CSV. ¿Realmente necesita una solución que use LO / OO / Excel y nada más?
user49740
De la forma en que lo escuchas ahora, cada fruta es una fila, en lo que respecta a los archivos delimitados por personajes ...
Austin T French
Realmente no conozco a Perl, y eso parece una cadena de expresiones regulares, que tampoco sé. Esto es realmente genial, lo intentaré en mi documento. ¿Hay alguna manera de hacer que esto también funcione con nueva línea?
stonewareslord
Por favor explique "haga que esto también funcione con nueva línea". Actualiza tu pregunta con un ejemplo. Además, debe aprender Perl y expresiones regulares, son muy útiles para tratar el texto.
user49740
2
Tratar sed -re 's/([^;]*);([^;]*);([^;]*);([^;]*);?/\1,\2,\3,\4\n/g' file.txt. Eso -res importante, y $1, $2,...están \1, \2,...en sintaxis sed.
user49740

Respuestas:

1

Macro de VBA para dividir filas enteras en varias filas

ingrese la descripción de la imagen aquí

Con esta macro, divide filas enteras en varias filas. Puedes elegir cuántas columnas quieres después de dividir. simplemente cambie el valor de iSpliten la primera línea. No uso un delimitador específico, solo conteo de columnas.

Comenté cada paso. Es fácil ajustar la macro a sus necesidades personales.

  1. Abra el editor de Excel y VBA con Alt+F11
  2. En el panel izquierdo, pegue el código debajo de la hoja donde se colocan sus datos
  3. Modifique las dos primeras líneas según sus necesidades.
  4. Ejecute la macro con F5

Const iSplit = 4    '## how many columns do you want after splitting

Sub transposeColumn()
    '## search the last row to know how many rows we have to iterate through
    iLastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

    '## begin to loop through every row. Begin at last row and go upwards
    For r = iLastRow To 1 Step -1

        '## search the last column in the current row
        iLastCol = Rows(r).Find("*", Cells(r, 1), , , xlByColumns, xlPrevious).Column

        '## calculate how many new rows we need to insert for this row
        iNewRows = WorksheetFunction.RoundUp(iLastCol / iSplit, 0) - 1

        '## begin to copy and insert new rows, one by one
        For c = 1 To iNewRows

            '## insert a new blank line where we can copy values to
            Rows(r + c).Insert Shift:=xlDown

            '## set the source range for easier access later
            Set rngSrc = Range(Cells(r, iSplit * c + 1), Cells(r, iSplit * c + iSplit))

            '## copy and paste the range
            rngSrc.Copy Destination:=Cells(r + c, 1)

            '## clear all cells which we have just copied
            rngSrc.Clear
        Next c
    Next r
End Sub
nixda
fuente
0

Si la lista es un archivo de texto, puede usar el Asistente de importación de texto en Excel. Supongo que hay una herramienta similar en LibreOffice y Openoffice.org.

Sin embargo, dado que los delimitadores son los ;signos, cuando importe, será necesario organizar los datos, ya que se importarán como una fila de valores. Puede modificar el archivo de texto original y agregar otro delimitador que signifique la siguiente fila.

Doktoro Reichard
fuente
Creo que stonewareslord está buscando un método automatizado, es decir, uno que no requiera la disposición manual de los datos.
user49740
No declaró explícitamente que quiere una forma 100% automatizada, dijo que quería usar LO / OO / Excel. A menos que use Macros (y eso es solo parte de Excel AFAIK), aparte de reemplazar 2 caracteres, no recuerdo otra opción. Si él quisiera un script en Perl, Python, etc., entonces esta pregunta sería más adecuada para SO.
Doktoro Reichard
Bueno, lo anterior es solo un ejemplo. Necesito ejecutar esto en un documento con aproximadamente 500 filas, por lo que el manual es casi imposible.
stonewareslord
0

Mi respuesta vino del usuario49740:

sed -re 's/([^;]*);([^;]*);([^;]*);([^;]*);?/\1,\2,\3,\4\n/g' input.txt > output.txt

La primera mitad de la cadena:

([^;]*);([^;]*);([^;]*);([^;]*);?

Encuentra 4 grupos de ([^;]*)(todos los caracteres antes del punto y coma) y luego un punto y coma. La segunda mitad:

\1,\2,\3,\4\n

Cambia el texto a formato CSV. > output.txtescribirá el archivo convertido en output.txt.

Stonewareslord
fuente