Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从大量文本文件中提取多行数据并关联到Excel中_Vba_Excel - Fatal编程技术网

Vba 从大量文本文件中提取多行数据并关联到Excel中

Vba 从大量文本文件中提取多行数据并关联到Excel中,vba,excel,Vba,Excel,关于如何修改脚本的任何建议,请参见: 要生成一个excel工作表,其中一列包含文件名(ini文件的文件名),第二列包含纬度,第三列包含经度?我还有一堆.ini文件,其中包含.jpg的相机参数,但需要提取名称、Lat和Long以进行进一步处理 以下是.ini文件的示例: 我尝试使用中的一些代码,但收效甚微。这应该可以满足您的需要—但处理过程中没有错误—它假定每个文件都按照您在示例中所示的方式进行布局。此外,我假设任何lat/lng对都可以,并且您只需要其中一对;因此,我提取与“左上角”相关的

关于如何修改脚本的任何建议,请参见:

要生成一个excel工作表,其中一列包含文件名(ini文件的文件名),第二列包含纬度,第三列包含经度?我还有一堆.ini文件,其中包含.jpg的相机参数,但需要提取名称、Lat和Long以进行进一步处理

以下是.ini文件的示例:




我尝试使用中的一些代码,但收效甚微。

这应该可以满足您的需要—但处理过程中没有错误—它假定每个文件都按照您在示例中所示的方式进行布局。此外,我假设任何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()
环
端接头

输出是什么样子的?输出是什么样子的?