J'ai été chargé de créer un modèle à l'aide d'ArcGIS ModelBuilder, qui exécute initialement quelques tâches de géotraitement, avant de joindre ensuite un tableau Excel au résultat de ces géotraitements. Cependant, le modèle doit réellement ouvrir le fichier Excel en premier, pour que l'utilisateur le modifie manuellement, avant que l'utilisateur enregistre ensuite ses modifications et ferme le fichier. Il est alors prévu que le modèle joigne ce fichier Excel à la table attributaire d'un ensemble de données (qui fait toujours partie du modèle) avant que le modèle ne continue avec un certain nombre d'autres tâches de géotraitement.
J'inclus un schéma de haut niveau ci-dessous pour aider à illustrer le point (je comprends que cela pourrait ne pas avoir beaucoup de sens pour commencer).
Ainsi, le modèle s'exécuterait, effectuerait quelques tâches de géotraitement, ferait une pause pour ouvrir un fichier Excel, attendrait que l'utilisateur le modifie, l'enregistre et le ferme, avant de reprendre pour joindre ce fichier Excel à une table attributaire, puis d'exécuter un nombre d'autres tâches de géotraitement.
Je devrais imaginer que cela nécessiterait d'incorporer un script Python ou deux dans le modèle. Actuellement, je souhaite simplement savoir si le concept est réellement possible ou non.
la source
Réponses:
Il semble que vous ayez besoin de développer davantage un outil Python personnalisé qu'un modèle dans ModelBuilder.
xlwt
ouxlutils
à http://www.python-excel.org/ vous permettra d'écrire dans votre fichier Excel (XlsxWriter
gérera les fichiers xlsx). Si les modifications sont mineures, vous pouvez probablement l'incorporer dans un outil ArcToolbox standard (avec un peu de créativité). Si vous utilisez 10.1+, vous pouvez créer un complément Python ou une boîte à outils Python pour faire également fonctionner l'interface graphique.la source
J'y ai réfléchi et il est possible que j'aie trouvé une nouvelle solution. Vous configurez un script python dans une boîte à outils avec deux paramètres utilisateur, tout d'abord l'emplacement de l'EXE Excel. Cela pourrait même être codé intelligemment pour vérifier une liste d'emplacements de chemin de fichier probables en code dur (Office12, Office13, etc.).
Utilisez ensuite la fonction subprocess.call. Il y a des choses vraiment intéressantes à utiliser cette méthode:
C'est une ligne de code!
import subprocess subprocess.call(["C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE", "Test.xlsx"])
#Replace args with user inputs (sys.argv[1], sys.argv[2] respectively)
La seule chose est que je ne suis pas sûr à 100% si cela fonctionnera dans le générateur de modèles, cela devra être testé, mais je ne vois pas pourquoi ce ne serait pas le cas, mais comme je suis sûr que vous savez que Arc est une bête capricieuse.
la source