我有这样一个列表:
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 行。
编辑2:提供我自己的(正确)答案
答案1
VBA 宏将整行拆分为多行
使用此宏,您可以将整行拆分为多行。拆分后,您可以选择需要的列数。只需更改iSplit
第一行的值即可。我没有使用特定的分隔符,只是列数。
我对每个步骤都进行了注释。您可以轻松根据个人需求调整宏。
- Alt使用+打开 Excel 和 VBA 编辑器F11
- 在左侧窗格中,将代码粘贴到床单您的数据存放在哪里
- 根据需要修改前两行
- 使用以下命令执行宏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
答案2
如果列表是文本文件,则可以使用文本导入向导在 Excel 中。我假设 LibreOffice 和 Openoffice.org 中都有类似的工具。
但是,由于分隔符是;
符号,因此导入时需要排列数据,因为数据将作为一行值导入。您可以修改原始文本文件并添加另一个分隔符来表示下一行。
答案3
我的回答来自用户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。