以特定的组织格式从Excel转换为文本

时间:2019-01-28 16:09:39

标签: arrays excel vba string

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

(488列,456行,3层)

(第1层,第1列,从下至上)  (7个空格)海拔1(7个空格)海拔2 ....(7个空格)海拔10(下一行)(7个空格)海拔11 .......海拔20(下一行) ... 海拔456 (第1层,第2列,从底部到顶部)

.xyz文件如下所示:

X坐标(标签)Y坐标(标签)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上还是excel的新手,所以我认为这是某种格式,我做错了,现在我遇到了1004错误。

1 个答案:

答案 0 :(得分:0)

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

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