Notepad++或Excel:转换两列,批量处理多个文件



我有多个形式的.txt文件

Name1|number1
Name2|number2
Name3|number3
(...)

我需要将它们转换为:

Name1|Name2|Name3|(...)
Number1|Number2|Number3|(...)

这对于excel中的单个文件来说很容易做到,但我需要一种方法来在一个文件夹中的多个文件中做到这一点。由于Notepad++允许查找和替换多个文件,我想知道是否有一种方法可以自动实现这一点。

虽然所有文件都有相同的模式(两列(,但并不是所有文件都具有相同的行数。

我使用Notepad++尝试了以下技巧:

  • |替换为回车,将所有内容都放在一列中,希望以某种方式对所有数字进行分组,将它们移到底部并重新组织
  • 用符号分隔两个副本(找到[sS]*.*,替换为n%n(,重复下面的全文,试图删除上面的所有数字和下面的所有名称|,以最终重新组织。还被在中间

正如您所看到的,即使使用Regex101,我对Regex的了解也非常有限。我不知道这是容易还是难实现,几个小时后我根本无法独自找到解决方案。

我能做什么?

感谢您的耐心等待。

谢谢你的回答。我考虑过宏,但所有的搜索结果都提到了PowerQuery。这是一个面向业务的插件,我很少需要它,所以除非别无选择,否则我不愿意(而且我碰巧也很喜欢Notepad++,这可能会让我失明(。

然而,我在谷歌上搜索错了问题;当我重新措辞搜索时,我找到了我需要的一切。使用ExcelVBA实现这一点非常简单。

来源:

  • 将宏应用于提示文件夹中的所有文件

我基本上录制了一个宏,将2列转换成行,并删除了原始列,这样只会显示转换后的行。然后,我复制了那个宏,并将其粘贴到另一个宏中(参见源代码(,该宏在文件夹中的所有文件中循环(并添加了另一段代码来自动保存和关闭文件(。

有了这个新的宏,就不需要打开任何文件;只需打开excel,插入宏并运行即可。

最终宏:

Sub LoopThroughFiles()
Dim xFd As FileDialog
Dim xFdItem As Variant
Dim xFileName As String
Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
If xFd.Show = -1 Then
xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
xFileName = Dir(xFdItem & "*.txt*")
Do While xFileName <> ""
With Workbooks.Open(xFdItem & xFileName)
'Start of transpose code
Range("A1").CurrentRegion.Select
Selection.Copy
Range("C1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Columns("A:B").Delete
Range("A1").Select
Application.CutCopyMode = False
'End of transpose code
'Save and close
ActiveWorkbook.Close SaveChanges:=True
'End of save and close
End With
xFileName = Dir
Loop
End If
End Sub

这太简单了,我现在觉得自己很愚蠢,很抱歉所有不得不阅读帖子并翻白眼的人。

最新更新