Me encargaron crear un modelo usando ArcGIS ModelBuilder, que inicialmente ejecuta un par de tareas de geoprocesamiento, antes de unir una tabla de Excel con el resultado de esos geoprocesos. Sin embargo, el modelo necesita abrir realmente el archivo Excel primero, para que el usuario lo edite manualmente, antes de que el usuario guarde sus ediciones y cierre el archivo. Luego se espera que el modelo unirá este archivo de Excel a la tabla de atributos de un conjunto de datos (todavía parte del modelo) antes de que el modelo continúe con una serie de otras tareas de geoprocesamiento.
Incluyo un esquema esquemático de alto nivel a continuación para ayudar a ilustrar el punto (entiendo que esto podría no tener mucho sentido para empezar).
Entonces, el modelo se ejecutará, completará un par de tareas de geoprocesamiento, se detendrá para abrir un archivo de Excel, esperará a que el usuario lo edite, lo guarde y lo cierre, antes de reanudar para unir ese archivo de Excel a una tabla de atributos y luego ejecutar un número de otras tareas de geoprocesamiento.
Debo imaginar que esto requeriría incorporar un script Python o dos en el modelo. Actualmente, aunque solo estoy interesado en saber si el concepto es realmente posible o no.
fuente
Respuestas:
Parece que necesita desarrollar más una herramienta Python personalizada que un modelo en ModelBuilder.
xlwt
oxlutils
en http://www.python-excel.org/ le permitirá escribir en su archivo de Excel (XlsxWriter
manejará los archivos xlsx). Si las ediciones son menores, probablemente podría incorporar esto en una herramienta ArcToolbox estándar (con algo de creatividad). Si está utilizando 10.1+, puede crear un complemento de Python o una caja de herramientas de Python para que la GUI también funcione.fuente
Lo he estado pensando y es posible que haya encontrado una solución novedosa. Configura un script de Python en una caja de herramientas con dos parámetros de usuario, en primer lugar, la ubicación del EXE de Excel. Esto incluso podría codificarse de manera inteligente para verificar una lista de ubicaciones probables de ruta de archivo de código duro (Office12, Office13, etc.).
Luego use la función subprocess.call. Hay algunas cosas realmente buenas sobre el uso de este método:
¡Es una línea de código!
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)
Lo único es que no estoy 100% seguro de si esto funcionará en el generador de modelos, esto tendrá que ser probado, sin embargo, no veo por qué no funcionaría, pero estoy seguro de que sabe que Arc lo está haciendo. una bestia temperamental
fuente