用excelvba对KML文件进行lat-long排序

用excelvba对KML文件进行lat-long排序,vba,excel,kml,Vba,Excel,Kml,我想知道是否有人能帮我 我正试图把一些latlong放进一个KML文件中,供Google Earth使用。但是从我的测试来看,KML文件似乎不喜欢真正长的latlongs,如果它太长,就会在KML中显示 我一直在尝试创建一些代码,这样,如果latlong字符串长度大于230个字符,它会将其切割成段,以便每行的长度小于230个字符 代码需要剪切latlong并将每个新零件粘贴到工作表中的新行上。latlong的每一行必须以0结尾,每一行必须以新的latlong开始,因此-1.39,55.292,0

我想知道是否有人能帮我

我正试图把一些latlong放进一个KML文件中,供Google Earth使用。但是从我的测试来看,KML文件似乎不喜欢真正长的latlongs,如果它太长,就会在KML中显示

我一直在尝试创建一些代码,这样,如果latlong字符串长度大于230个字符,它会将其切割成段,以便每行的长度小于230个字符

代码需要剪切latlong并将每个新零件粘贴到工作表中的新行上。latlong的每一行必须以0结尾,每一行必须以新的latlong开始,因此-1.39,55.292,0-1.32。。。。。等

我尝试了以下方法:

拉特拉拉特拉拉特拉特拉拉特拉特拉特拉特拉特拉特拉特拉拉特拉特拉拉特拉特拉特拉拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉特拉23.92537,0-3.39686,50.92549,0-3.39688,41.9256,0

    Dim Revserse As String
    Dim length2 As String
    length2 = Len(LatLong)
    Dim point As Integer
    Dim NewLatLong As String

If Len(LatLong) < 230 Then
    ActiveCell.Value = LatLong
    ActiveCell.Offset(1).Select
    Selection.Insert Shift:=xlDown
Else

    NewLatLong = Left(LatLong, 230)
    Revserse = StrReverse(NewLatLong)
    For i = 1 To Len(Revserse)
        If Mid(Revserse, i, 2) = "0," Then
            point = i
            Exit For
        End If
    Next i
    point = 230 - point

First_new_latlong = Left(LatLong, (point + 1))

Second_new_latlong= Right(LatLong, (length2 - (point + 1)))
MsgBox newlatlong1

MsgBox newlatlong2
End if
但是,我上面的代码没有检查latlong的新切碎部分是否再次超过230个字符。但我想不出来。我认为需要有一个for循环,不断检查新的latlong是否大于230,但由于约束,即必须以0结尾,新行必须以新的latlong开始-1.29,55.11,0。。。这会变得棘手

我想知道是否有人能帮忙


谢谢你的帮助

从KML规范中可以看出,在一条直线上不需要有多个坐标三元组。毫无疑问,你可以这样做,但你不需要这样做

因此,您应该能够在每个三元组之间插入一个CR/LF,而不是一个空格:

Dim latlong As String
latlong = "-1.39665,55.92563,0 -2.39654,52.92552,0 -3.39626,51.92541,0 -3.39617,55.92533,0 -3.39621,41.92526,0 -3.39649,51.92525,0 -3.39668,55.92529,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0 -1.39684,23.92537,0 -3.39686,50.92549,0 -3.39688,41.9256,0"

latlong = Replace(latlong, " ", vbCrLf)

MsgBox latlong

然后,从该代码生成的字符串应该能够插入到KML文件中。

为什么在开始下一行之前需要一直插入到将近230个字符?你不能在你写的每一个坐标lat/long/alt后加上一个vbCrLf吗?谢谢你的帮助!