3

У меня есть список, как это:

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

И я хочу преобразовать его, выбрав каждые 4 разделителя и превратив их в строки следующим образом:

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

Как это возможно с Libreoffice (предпочтительно), Openoffice или Excel?

Изменить: приведенный выше пример. Я использую его для выбора 4 разделителей, но есть около 500 строк, над которыми мне нужно работать.

Edit2: предоставил мой собственный (правильный) ответ

3 ответа3

1

Макрос VBA для разделения целых строк на несколько строк

С помощью этого макроса вы разделяете целые строки на несколько строк. Вы можете выбрать, сколько столбцов вы хотите после разделения. просто измените значение для iSplit в первой строке. Я не использую определенный разделитель, просто количество столбцов.

Я прокомментировал каждый шаг. Макрос легко настроить в соответствии с вашими потребностями.

  1. Откройте редактор Excel и VBA с помощью Alt+F11
  2. На левой панели вставьте код под лист, где размещены ваши данные
  3. Измените первые две строки в соответствии с вашими потребностями
  4. Выполнить макрос с помощью 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
0

Если список представляет собой текстовый файл, вы можете использовать Мастер импорта текста в Excel. Я предполагаю, что похожий инструмент есть и в LibreOffice, и в Openoffice.org.

Тем не менее, так как разделителями являются ; Признаки, при импорте будет необходимо упорядочить данные, так как они будут импортированы как ряд значений. Вы можете изменить исходный текстовый файл и добавить еще один разделитель, который обозначает следующую строку.

0

Мой ответ пришел от пользователя 49740:

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

Первая половина строки:

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

Находит 4 группы ([^;]*) (все символы перед точкой с запятой), затем точка с запятой. Вторая половина:

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

Изменяет текст в формат CSV. > output.txt запишет преобразованный файл в output.txt.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .