Mehr

Tool in Python-Toolbox erstellen, um Feldliste nach Excel zu exportieren?

Tool in Python-Toolbox erstellen, um Feldliste nach Excel zu exportieren?


Ich erstelle mein erstes Tool in einer Python-Toolbox (*.pyt), um eine Liste von Feldnamen nach Excel zu exportieren. Ich habe folgende Code-Stücke:

import arcpy class Toolbox(object): def __init__(self): self.label = "Toolbox" self.alias = "Field to Table" self.tools = [Tool] class Tool(object): def __init__(self): self .label = "Tool" self.description = "Felder in Tabelle exportieren" self.canRunInBackground = False def getParameterInfo(self): param0 = arcpy.Parameter( displayName="Shapefile", name="shapefile", datatype="DEShapefile" , parameterType="Required", direction="Input") param1 = arcpy.Parameter( displayName="Field Table", name="datafile", datatype="DETable", parameterType="Required", direction="Output") params = [param0, param1] return params def isLicensed(self): return True def updateParameters(self, parameters): return def updateMessages(self, parameters): return def execute(self, Parameter, Messages): shapefile = params[0 ].valueAsText fields = arcpy.ListFields(shapefile) datafile = params[1].valueAsText spreds = open (datafile, 'w') für f in Feldern: spreds.write(f.name + "
") spreds.close () Rückkehr

Erstens funktioniert der eigentliche Ausführungsteil des Codes gut, wie ich ihn getestet habe. Ich bin mir nicht sicher, was beim Konvertieren in eine .pyt-Datei falsch ist.

Sobald ich das zum Laufen gebracht habe, gibt es sowieso einen Parameter innerhalb des Tools zu erstellen, um eine neue Excel / DBF-Datei zu erstellen und das Skript mit diesen Informationen auszuführen, anstatt zuerst einen erstellen zu müssen, bevor das Skript ausgeführt wird. Ich hoffe das ergibt Sinn.


Ich glaube, Ihr Hauptproblem besteht darin, wie die Parameter an die Ausführung übergeben werden. Das Definieren von Objektparametern funktioniert wie eine Funktion, bei der Deklarationen nicht global sind. Probieren Sie es aus:

def execute(self, params, messages): #params ist Ihre Parameterliste aus getParameterInfo shapefile = params[0].valueAsText #erster Parameter aus Ihrer Liste fields = arcpy.ListFields(shapefile) #Großschreibung Maters Excelfile = params[1]. valueAsText #zweiter Parameter aus Ihrer Liste spreds = open (excelfile, 'w') für f in Feldern: spreds.write(f.name + "
") spreds.close() return

Weitere Informationen: Zugriff auf Parameter innerhalb einer Python-Toolbox

Außerdem: Objekt def einrücken, Klasse Toolbox(object) wie in diesem Beispiel gezeigt hinzufügen und GPShapefile entsprechend den Datentypen in DEShapefile oder GPLayer ändern


Die Antwort von @jbosq behebt das Problem beim Zugriff auf die Parameter und Ihre Einrückungsfehler.

Der Code wie er ist öffnet jedoch den Pfad zuExcel-Dateials Textdatei, nicht eine Excel-Tabelle und schreiben Sie einfach die Feldnamen getrennt durch einen Zeilenumbruch in diese Textdatei. Sie müssen verwendenxlwt(für .xls Excel 2003 binäre Tabellenkalkulationen) oderopenpyxl(für .xlsx Excel 2007+ OOXML-Tabellen) oderarcpy.management.CreateTable/arcpy.da.InsertCursoranstelle des eingebauten Pythonsoffen()Funktion.

Zusätzlich (pro @Pauls Kommentar) ändernRichtung="Eingabe"zuRichtung="Ausgabe")für param1.

Wenn Sie schließlich die Daten mit in die Tabelle schreibenxlwtoderopenpyxlanstattarcpy.management.CreateTable/arcpy.da.InsertCursorSie müssen den Datentyp von param1 ändern vonDETabellezuVerunreinigenund fügen Sie einen Filter hinzu, d.h.param1.filter.list = ['xls'](bei Verwendungxlwt) oderparam1.filter.list = ['xlsx'](bei Verwendung vonopenpyxl).