|

楼主 |
发表于 2025-3-11 21:38
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
Sub ConvertGSItoXLS()
Dim ws As Worksheet
Dim filePath As String, savePath As String
Dim fileNum As Integer
Dim lineData As String
Dim rowNum As Integer
Dim colDict As Object
Dim valuePart As String, keyPart As String
' 选择 GSI 文件
filePath = Application.GetOpenFilename("GSI Files (*.gsi), *.gsi", , "选择 GSI 文件")
If filePath = "False" Then Exit Sub ' 用户取消选择
' 目标 Excel 文件路径
savePath = ThisWorkbook.Path & "\ffff.xls"
' 创建新工作表
Set ws = ThisWorkbook.Sheets(1)
ws.Cells.Clear
' 设置表头
ws.Cells(1, 1).Value = "点号(测站)"
ws.Cells(1, 2).Value = "觇标高"
ws.Cells(1, 3).Value = "编码(后视)"
ws.Cells(1, 4).Value = "水平角"
ws.Cells(1, 5).Value = "天顶距"
ws.Cells(1, 6).Value = "斜距"
rowNum = 2
' 打开 GSI 文件
fileNum = FreeFile
Open filePath For Input As #fileNum
' 读取每一行数据
Do While Not EOF(fileNum)
Line Input #fileNum, lineData
' 分离数值和关键词
valuePart = Trim(Left(lineData, InStr(lineData, "+") - 1))
keyPart = Trim(Mid(lineData, InStr(lineData, "+") + 1))
' 分类数据
Select Case True
Case InStr(keyPart, "水平角") > 0
ws.Cells(rowNum, 4).Value = valuePart
Case InStr(keyPart, "天顶距") > 0
ws.Cells(rowNum, 5).Value = valuePart
Case InStr(keyPart, "斜距") > 0
ws.Cells(rowNum, 6).Value = valuePart
Case InStr(keyPart, "觇标高") > 0
ws.Cells(rowNum, 2).Value = valuePart
Case Else
ws.Cells(rowNum, 1).Value = keyPart ' 默认放在点号列
End Select
' 移动到下一行
rowNum = rowNum + 1
Loop
' 关闭文件
Close #fileNum
' 保存 Excel 文件
ThisWorkbook.SaveAs savePath, xlExcel8
MsgBox "转换完成!Excel 文件已保存至: " & savePath, vbInformation, "成功"
End Sub |
|