【问题标题】:Excel to Text in a specific organized formatExcel 到特定组织格式的文本
【发布时间】:2019-06-21 16:38:55
【问题描述】:

我正在尝试将海拔 .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 错误。

【问题讨论】:

  • 你从哪里得到这个错误?
  • 您的代码未编译。请先解决这个问题,否则恐怕没有人可以帮助您。
  • 您似乎丢失了 End If - 可能是在 'Array to textfile 之前,但我们无法确定。
  • 您不应该将Myfile 放在Open 行的引号中。如果您想使用 MyFile 变量的内容,则不是。

标签: arrays excel vba string


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多