Excel 如何从约1500个格式相同的txt文件中提取一行,并将值保存到csv或xls?
我试图从大约1500个格式相同的txt文件中提取一行文本,然后将这些行中的所有值连同相应的日期(txt文件名)保存到csv文件中 所述txt文件中的行被格式化(上下各有一行数据): 我希望最终生成一个如下所示的xls文件:Excel 如何从约1500个格式相同的txt文件中提取一行,并将值保存到csv或xls?,excel,data-structures,spreadsheet,data-extraction,Excel,Data Structures,Spreadsheet,Data Extraction,我试图从大约1500个格式相同的txt文件中提取一行文本,然后将这些行中的所有值连同相应的日期(txt文件名)保存到csv文件中 所述txt文件中的行被格式化(上下各有一行数据): 我希望最终生成一个如下所示的xls文件: Date AVG1 AVG2 AVG3 AVG4 AVG5 12-13-06 14.64 9.49 9.46 0.16 243.71 我曾考虑过使用grep或awk,但坦率地说,我不知道从哪里开始。命令行批处理过程是最佳攻击线吗?理想的最终结果
Date AVG1 AVG2 AVG3 AVG4 AVG5
12-13-06 14.64 9.49 9.46 0.16 243.71
我曾考虑过使用grep或awk,但坦率地说,我不知道从哪里开始。命令行批处理过程是最佳攻击线吗?理想的最终结果是将所有这些每日平均值及其相应日期导入excel电子表格。excel中的导入txt选项可以逐个文件工作,但这里的问题是,除非我有一大群人,否则手动将1500个单独文件从txt导入xls文件所需的时间是不可行的
任何见解或指导都将不胜感激。假设:
- 所有文本文件都位于同一文件夹中
- 文本文件以制表符分隔
Sub tgr()
Dim oShell As Object
Dim oFSO As Object
Dim arrData(1 To 65000) As String
Dim strFolderPath As String
Dim strFileName As String
Dim strText As String
Dim DataIndex As Long
Dim lAvgLoc As Long
Set oShell = CreateObject("Shell.Application")
On Error Resume Next
strFolderPath = oShell.BrowseForFolder(0, "Select a Folder", 0).Self.Path & Application.PathSeparator
Set oShell = Nothing
On Error GoTo 0
If Len(strFolderPath) = 0 Then Exit Sub 'Pressed cancel
Set oFSO = CreateObject("Scripting.FileSystemObject")
strFileName = Dir(strFolderPath & "*.txt*")
Do While Len(strFileName) > 0
strText = oFSO.OpenTextFile(strFolderPath & strFileName).ReadAll
lAvgLoc = InStr(1, strText, "Daily Avg", vbTextCompare)
If lAvgLoc > 0 Then
strText = Mid(strText, lAvgLoc)
strText = Trim(Mid(Replace(strText, vbCrLf, String(255, " ")), Evaluate("MIN(FIND({1,2,3,4,5,6,7,8,9,0},""" & strText & """&1234567890))"), 240))
DataIndex = DataIndex + 1
arrData(DataIndex) = DateValue(Replace(strFileName, ".txt", vbNullString)) & vbTab & strText
End If
strFileName = Dir
Loop
If DataIndex > 0 Then
With Sheets.Add
.Range("A1:F1").Value = Array("DATE", "AVG1", "AVG2", "AVG3", "AVG4", "AVG5")
With .Range("A2").Resize(DataIndex)
.Value = Application.Transpose(arrData)
.TextToColumns .Cells, xlDelimited, xlTextQualifierDoubleQuote, Tab:=True
.NumberFormat = "mm-dd-yy"
End With
Application.DisplayAlerts = False
.SaveAs strFolderPath & "Daily Averages.csv", xlCSV
Application.DisplayAlerts = True
End With
End If
Set oFSO = Nothing
Erase arrData
End Sub
如何使用宏:
- 始终在工作簿副本上运行新代码,以防代码运行不顺畅
- 这对于任何删除任何内容的代码来说尤其如此
您可以使用这个bashshell脚本
#!/bin/sh
echo Date AVG1 AVG2 AVG3 AVG4 AVG5 > output.txt
for i in *.txt
do
STRING=${i%.txt}
DATA=`cat $i | tr -s ' ' | cut -d ' ' -f 3-`
echo $STRING $DATA >> output.txt
done
假设所有数据文件都在当前目录中,这将把您想要的输出放在
output.txt
中。然后可以将其加载到Excel中。日期从何而来?文件名,文件“上次修改”戳记?日期来自文件名。例如:“12-13-06.txt”我不会将此作为答案发布,因为您的问题可以通过多种方式解决。选项有:shell脚本+awk(如果您是awk的老板:)或(通过shell脚本循环)在[id | date | avg1 | | | avg5]数据库中加载文件,然后使用任何您觉得合适的编程语言根据需要对其进行格式化。可能还有其他选择。。。
#!/bin/sh
echo Date AVG1 AVG2 AVG3 AVG4 AVG5 > output.txt
for i in *.txt
do
STRING=${i%.txt}
DATA=`cat $i | tr -s ' ' | cut -d ' ' -f 3-`
echo $STRING $DATA >> output.txt
done