首页 > 解决方案 > Excel 到特定组织格式的文本

问题描述

我正在尝试将海拔 .xyz 文本文件组织成 Visual Modflow 4.2 .VMG 格式,用于地下水建模。海拔的具体格式如下:

(488列,456行,3层)

(第 1 层,第 1 列,从下到上行)(7 个空格)Elevation1(7 个空格)Elevation2....(7 个空格)Elevation10(下一行)(7 个空格)Elevation 11....Elevation20(下一行) ) ... 海拔 456 (第 1 层,第 2 列,从底部到顶部行)

.xyz 文件如下所示:

X 坐标(制表符) YCoord(制表符) Z 坐标 我将它粘贴到前 3 列的活动 Excel 工作表中。它一直持续到大约 300.000 行。

所以它从第一列从上到下遍历所有行。

我需要制作的文件没有指定坐标,它们只是假设从下到上的顺序,并且坐标已经按照所需的顺序设置了。所以它是每行 10 个高程,每行由 7 个空格分隔。

`Private Sub Elevation_VMG()

Dim ElevacionesArray(1 To 488, 1 To 456) As Variant 'array with 3 layers, 
488 columns, 456 rows
Dim I As Integer 'counters
Dim J As Integer
Dim S As Integer
Dim C As Integer
Dim H As Integer
Dim MyFile As String


MyFile = Application.DefaultFilePath & "C:\output.txt"
Close #1
Open "MyFile" For Output As #1

C = 2
For I = 1 To 488 '497 columnas
    For J = 1 To 456 '464 filas

       ElevacionesArray(I, J) = 
ActiveWorkbook.Worksheets("Hoja1").Cells(3, C).Value
        C = C + 1
    Next J
Next I


For I = 1 To 488
C = 1
    For J = 1 To 456
    If C >= 10 Then
    Write #1, vbNewLine
    C = 1

       'Array to textfile
        Write #1, "       " + ElevacionesArray(I, J)

        C = C + 1
    Next J
  Next I


 Close #1

End Sub`

我还是 VBA for excel 的新手,所以我认为这是我做错了一些格式,现在我收到 1004 错误。

标签: arraysexcelvbastring

解决方案


我已经清理了您代码中的明显错误,并评论了我所做的更改以帮助您理解:

Private Sub Elevation_VMG()

Dim ElevacionesArray(1 To 488, 1 To 456) As Variant 'array with 3 layers,488 columns, 456 rows
Dim I As Integer 'counters
Dim J As Integer
Dim S As Integer
Dim C As Long ' 488*456 requires a Long to hold a number of that size
Dim H As Integer
Dim MyFile As String

MyFile = Application.DefaultFilePath & "\output.txt" ' Removed reference to C drive
Close #1
Open MyFile For Output As #1 ' Removed quotes

C = 2
For I = 1 To 488 '497 columnas
    For J = 1 To 456 '464 filas
       ElevacionesArray(I, J) = ActiveWorkbook.Worksheets("Hoja1").Cells(C, 3).Value ' swapped (3, C) row/columns here
        C = C + 1
    Next J
Next I

For I = 1 To 488
    C = 1
    For J = 1 To 456
        If C >= 10 Then
            Write #1, vbNewLine
            C = 1
        End If

        'Array to textfile
        Write #1, "       " + ElevacionesArray(I, J)
        C = C + 1
    Next J
Next I

Close #1

End Sub

推荐阅读