Vba 从大量文本文件中提取多行数据并关联到Excel中
关于如何修改脚本的任何建议,请参见: 要生成一个excel工作表,其中一列包含文件名(ini文件的文件名),第二列包含纬度,第三列包含经度?我还有一堆.ini文件,其中包含.jpg的相机参数,但需要提取名称、Lat和Long以进行进一步处理 以下是.ini文件的示例:Vba 从大量文本文件中提取多行数据并关联到Excel中,vba,excel,Vba,Excel,关于如何修改脚本的任何建议,请参见: 要生成一个excel工作表,其中一列包含文件名(ini文件的文件名),第二列包含纬度,第三列包含经度?我还有一堆.ini文件,其中包含.jpg的相机参数,但需要提取名称、Lat和Long以进行进一步处理 以下是.ini文件的示例: 我尝试使用中的一些代码,但收效甚微。这应该可以满足您的需要—但处理过程中没有错误—它假定每个文件都按照您在示例中所示的方式进行布局。此外,我假设任何lat/lng对都可以,并且您只需要其中一对;因此,我提取与“左上角”相关的
我尝试使用中的一些代码,但收效甚微。这应该可以满足您的需要—但处理过程中没有错误—它假定每个文件都按照您在示例中所示的方式进行布局。此外,我假设任何lat/lng对都可以,并且您只需要其中一对;因此,我提取与“左上角”相关的一个。此外,所有.ini文件都位于C:Temp\Test目录中,并假定您希望将数据附加到ActiveSheet的最后一行之后:
Option Explicit
Sub ExtractLatLng()
Dim MyFolder As String, MyFile As String, textline As String
Dim r As Integer, pos As Integer
MyFolder = "C:\Temp\Test\"
MyFile = dir(MyFolder & "*.ini")
r = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).row + 1
Do While MyFile <> ""
Open (MyFolder & MyFile) For Input As #1
Do Until EOF(1)
Line Input #1, textline
pos = InStr(textline, "[top_left]")
If pos = 1 Then
ActiveSheet.Cells(r, "A").Value = MyFile
Line Input #1, textline
pos = InStr(textline, "=")
ActiveSheet.Cells(r, "C").Value = Mid(textline, pos + 1)
Line Input #1, textline
pos = InStr(textline, "=")
ActiveSheet.Cells(r, "B").Value = Mid(textline, pos + 1)
r = r + 1
Exit Do
End If
Loop
Close #1
MyFile = dir()
Loop
End Sub
选项显式
副提取器
将MyFolder设置为字符串、MyFile设置为字符串、textline设置为字符串
Dim r为整数,pos为整数
MyFolder=“C:\Temp\Test\”
MyFile=dir(MyFolder&“*.ini”)
r=ActiveSheet.Cells(ActiveSheet.Rows.Count,“A”)。End(xlUp)。row+1
当我的文件“”时执行此操作
打开(MyFolder&MyFile)作为#1输入
直到EOF(1)为止
行输入#1,文本行
位置=仪表(文本行,“[左上方]”)
如果pos=1,则
ActiveSheet.Cells(r,“A”).Value=MyFile
行输入#1,文本行
位置=仪表(文本行“=”)
ActiveSheet.Cells(r,“C”).Value=Mid(文本行,位置+1)
行输入#1,文本行
位置=仪表(文本行“=”)
ActiveSheet.Cells(r,“B”).值=中间(文本行,位置+1)
r=r+1
退出Do
如果结束
环
关闭#1
MyFile=dir()
环
端接头
这应该满足您的要求—但处理过程中没有错误—它假定每个文件都按照您在示例中所示的方式进行布局。此外,我假设任何lat/lng对都可以,并且您只需要其中一对;因此,我提取与“左上角”相关的一个。此外,所有.ini文件都位于C:Temp\Test目录中,并假定您希望将数据附加到ActiveSheet的最后一行之后:
Option Explicit
Sub ExtractLatLng()
Dim MyFolder As String, MyFile As String, textline As String
Dim r As Integer, pos As Integer
MyFolder = "C:\Temp\Test\"
MyFile = dir(MyFolder & "*.ini")
r = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).row + 1
Do While MyFile <> ""
Open (MyFolder & MyFile) For Input As #1
Do Until EOF(1)
Line Input #1, textline
pos = InStr(textline, "[top_left]")
If pos = 1 Then
ActiveSheet.Cells(r, "A").Value = MyFile
Line Input #1, textline
pos = InStr(textline, "=")
ActiveSheet.Cells(r, "C").Value = Mid(textline, pos + 1)
Line Input #1, textline
pos = InStr(textline, "=")
ActiveSheet.Cells(r, "B").Value = Mid(textline, pos + 1)
r = r + 1
Exit Do
End If
Loop
Close #1
MyFile = dir()
Loop
End Sub
选项显式
副提取器
将MyFolder设置为字符串、MyFile设置为字符串、textline设置为字符串
Dim r为整数,pos为整数
MyFolder=“C:\Temp\Test\”
MyFile=dir(MyFolder&“*.ini”)
r=ActiveSheet.Cells(ActiveSheet.Rows.Count,“A”)。End(xlUp)。row+1
当我的文件“”时执行此操作
打开(MyFolder&MyFile)作为#1输入
直到EOF(1)为止
行输入#1,文本行
位置=仪表(文本行,“[左上方]”)
如果pos=1,则
ActiveSheet.Cells(r,“A”).Value=MyFile
行输入#1,文本行
位置=仪表(文本行“=”)
ActiveSheet.Cells(r,“C”).Value=Mid(文本行,位置+1)
行输入#1,文本行
位置=仪表(文本行“=”)
ActiveSheet.Cells(r,“B”).值=中间(文本行,位置+1)
r=r+1
退出Do
如果结束
环
关闭#1
MyFile=dir()
环
端接头
输出是什么样子的?输出是什么样子的?