将CSV文件合并为一个主文件并将文件名保留在列2中
问题描述:
我有很多CSV。我想合并成一个大的,进一步的文件,我还需要保持文件名中的列2将CSV文件合并为一个主文件并将文件名保留在列2中
我的CSV文件的内容
文件名ABNK102455
Column A
12/215425
12/125485
12/215435
文件名ABNK102456
Column A
12/215425
12/125485
12/215435
结果
Combined.CSV
Column A
12/215425 ABNK102455
12/125485 ABNK102455
12/215435 ABNK102455
12/215425 ABNK102456
12/125485 ABNK102456
12/215435 ABNK102456
这是可能的,以及如何?
答
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "mask=q*.csv"
SET "headerlinegenerated="
(
FOR /f "delims=" %%a IN ('dir /a-d /b "%sourcedir%\%mask%"') DO (
SET "headerline="
FOR /f "usebackqdelims=" %%m IN ("%sourcedir%\%%~nxa") DO (
IF NOT DEFINED headerlinegenerated SET "headerlinegenerated=Y"&ECHO %%m
IF DEFINED headerline ECHO %%m %%~na
SET headerline=Y
)
)
)>newfile.txt
GOTO :EOF
你需要改变的sourcedir
设置,以满足您的具体情况。
我使用了一个名为q26135599-1.csv
和q26135599-2.csv
的文件,其中包含我的测试数据。您需要调整mask
的设置以适应。
主要生产newfile.txt
最好不要尝试在源目录中创建newfile.txt
为.csv
,除非你真的相信它不会被列入%mask%
。
答
,让你去....
Sub Test()
Dim Idx As Long
Dim RowNum As Long
Dim TargetRange As Range
Dim FileName As String
RowNum = 1
Set TargetRange = ActiveSheet.[A1]
' File selection loop
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
' use .Filters.Add ... to present only .txt, .csv files etc.
.Show
' File processing loop
For Idx = 1 To .SelectedItems.Count
' here you get each file name inc. full path ... one by one
FileName = .SelectedItems(Idx)
' isolate filename
' open file
' while not end of file
' read from file line by line into a string variable
' place string into TargetRange(RowNum, 1)
' place filename into TargetRange(RowNum, 2)
' increment RowNuM
Next Idx
End With
End Sub
+0
嗨@MikeD,谢谢你这个VB代码,也会看看我是否可以得到这个 – user3906930 2014-10-01 10:39:54
好方法在命令行上执行它......没有想到那个... +1 – MikeD 2014-10-01 07:39:51
Hi @ Magoo,非常感谢你的帮助,我将如何运行?看着这在CMD中完成,我对DOS不太好。 – user3906930 2014-10-01 10:12:36
复制并粘贴到'filenameofyourchoosing.bat'。然后只需从'cmd'提示符下运行'filenameofyourchoosing'。如果你将'.bat'存储在''path''中,那么从哪个目录运行它并不重要。或者,您可以为'.bat'文件建立一个“快捷方式”,并通过点击它从桌面运行它。 – Magoo 2014-10-01 10:47:25