Suite

Créer un outil dans la boîte à outils Python pour exporter la liste des champs vers Excel ?


Je crée mon premier outil dans une boîte à outils Python (*.pyt) pour exporter une liste de noms de champs vers Excel. J'ai les bouts de code suivants :

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 = "Exporter les champs vers la table" 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, parameters, messages): shapefile = params[0 ].valueAsText fields = arcpy.ListFields(shapefile) datafile = params[1].valueAsText spreds = open (datafile, 'w') pour f dans les champs : spreds.write(f.name + "
") spreds.close () revenir

Tout d'abord, la partie exécution réelle du code fonctionne bien car je l'ai testée. Je ne sais pas ce qui ne va pas lorsque je convertis en fichier .pyt.

Une fois que cela fonctionne, est-il possible de créer un paramètre dans l'outil pour créer un nouveau fichier excel/dbf et exécuter le script avec ces informations, plutôt que d'avoir à en créer un avant d'exécuter le script. J'espère que cela à du sens.


Je crois que votre principal problème réside dans la façon dont les paramètres sont transmis à l'exécution. La définition des paramètres d'objet fonctionne comme une fonction où les déclarations ne sont pas globales. Essayez ceci :

def execute(self, params, messages): #params est votre liste de paramètres de getParameterInfo shapefile = params[0].valueAsText #premier paramètre de votre liste fields = arcpy.ListFields(shapefile) #capitalization maters excelfile = params[1]. valueAsText #second paramètre de votre liste spreds = open (excelfile, 'w') pour f dans les champs : spreds.write(f.name + "
") spreds.close() return

Pour plus d'informations : accéder aux paramètres dans une boîte à outils Python

Aussi: Indentez la définition de l'objet, ajoutez la classe Toolbox (objet) comme indiqué dans cet exemple et changez GPShapefile en DEShapefile ou GPLayer en fonction des types de données


La réponse de @jbosq résout le problème d'accès aux paramètres et vos erreurs d'indentation.

Cependant, le code tel quel ouvrira le chemin versfichier Excelsous forme de fichier texte, ne pas une feuille de calcul Excel et écrivez simplement les noms de champs séparés par une nouvelle ligne dans ce fichier texte. Vous devez utiliserxlwt(pour les feuilles de calcul binaires .xls Excel 2003) ouopenpyxl(pour les feuilles de calcul .xlsx Excel 2007+ OOXML) ouarcpy.management.CreateTable/arcpy.da.InsertCursorau lieu du python intégréouvert()une fonction.

De plus (selon le commentaire de @Paul), modifiezdirection="Entrée"àdirection="Sortie")pour param1.

Enfin, si vous écrivez les données dans la feuille de calcul en utilisantxlwtou alorsopenpyxlà la place dearcpy.management.CreateTable/arcpy.da.InsertCursorvous devez changer le type de données param1 deDETableauàDéfiléet ajouter un filtre, c'est-à-direparam1.filter.list = ['xls'](si vous utilisezxlwt) ou alorsparam1.filter.list = ['xlsx'](si vous utilisezopenpyxl).


Voir la vidéo: Fabrication dune boîte en bois avec assemblage à 45! (Octobre 2021).