如何使用 VBA 写入 Python 文件?

How to write a Python file using VBA?

我想使用 excel VBA 在 python 中编辑脚本文件,然后在 ArcGis 中 运行。首先,我愿意接受任何更简单的方法,但到目前为止,我在使用 VBA sub!

制作多行脚本时遇到了问题

& vbCrLf & 在命令 Fileout.Write 中不起作用。当我打开我的脚本文件时,所有内容都在同一行上。

& Char(34) & 都不工作。

Private Sub CommandButton4_Click()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim path As String
    path = Application.ActiveWorkbook.path


    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile(path & "\" & "test2.py", True, True)
    Fileout.Write "import arcpy & vbCrLf & lyr = arcpy.mapping.Layer( & Char(34) & limits & Char(34) &) & vbCrLf & lyr.visible = True & vbCrLf & arcpy.RefreshActiveView()'"
    Fileout.Close
End Sub

这里是:你在正确的轨道上,但在处理字符串构建时被绊倒了。

您想使用 & 运算符连接用双引号括起来的字符串位。当您需要在字符串中使用双引号时,只需将它们加倍即可。

Private Sub CommandButton4_Click()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim path As String
    path = Application.ActiveWorkbook.path


    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile(path & "\" & "test2.py", True, True)
    Fileout.Write "import arcpy" & vbCrLf & "lyr = arcpy.mapping.Layer(""limits"")" & vbCrLf & "lyr.visible = True" & vbCrLf & "arcpy.RefreshActiveView()'"
    Fileout.Close
End Sub

错误在这里:

Fileout.Write "import arcpy & vbCrLf & lyr = arcpy.mapping.Layer( & Char(34) & limits & Char(34) &) & vbCrLf & lyr.visible = True & vbCrLf & arcpy.RefreshActiveView()'"

这没有给出预期的输出,因为您在要计算的 VBA 代码周围有引号。修复引号给出

Fileout.Write "import arcpy" & vbCrLf & "lyr = arcpy.mapping.Layer(" & Char(34) & limits & Char(34) & ")" & vbCrLf & "lyr.visible = True" & vbCrLf & "arcpy.RefreshActiveView()"

让我们使用一些续行符 (_) 使这段代码更易读:

Fileout.Write "import arcpy" & vbCrLf _
            & "lyr = arcpy.mapping.Layer(" & Char(34) & limits & Char(34) & ")" & vbCrLf _
            & "lyr.visible = True" & vbCrLf _
            & "arcpy.RefreshActiveView()"

Char(34) 可以通过双引号实现("" 内的引号计算为双引号):

Fileout.Write "import arcpy" & vbCrLf _
            & "lyr = arcpy.mapping.Layer(""" & limits & """)" & vbCrLf _
            & "lyr.visible = True" & vbCrLf _
            & "arcpy.RefreshActiveView()"

您可以使用多个 WriteLine 代替 Write 去掉每行的 & vbCrLf _

Fileout.WriteLine "import arcpy"
Fileout.WriteLine "lyr = arcpy.mapping.Layer(""" & limits & """)"
Fileout.WriteLine "lyr.visible = True"
Fileout.WriteLine "arcpy.RefreshActiveView()"