¿Puede ArcGIS ModelBuilder abrir el archivo de Excel para la edición manual y luego alimentar esas ediciones nuevamente en el modelo?

10

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).

El modelo se detendría mientras se editaba el archivo de Excel, luego se reanudaría una vez guardado y cerrado

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.

the_bonze
fuente
1
Estoy bastante seguro de que con las herramientas estándar de creación de modelos no podrá hacer esto, ya que no hay forma de pausar el modelo, también necesitaría algún tipo de disparador para decir que el usuario ha cerrado Excel para reiniciar el modelo. ¿Puede lograr esto con algún tipo de script enviado en un bucle infinito mirando una bandera en un archivo de texto después de que haya generado un proceso separado (Excel)? Nunca he hecho eso y no sé cuáles son las trampas. Si desea mantenerlo en modelbuilder, primero haría las ediciones de Excel y luego ejecutaría el modelo.
Hornbydd
Gracias @Hornbydd: he tenido los mismos pensamientos. Editar el archivo primero y luego ejecutar el modelo es lo que he sugerido, pero me han dicho que debe ser un modelo integrado ...
the_bonze
1
Me imagino que un script podría ver la fecha y hora de un archivo para saber si ha sido editado, y luego reanudar el modelo desde allí. Pausarlo es el problema, creo.
the_bonze
Sí, el generador de modelos está diseñado para automatizar un flujo de trabajo para acelerar el procesamiento y no tener una pausa indeterminada en el medio, ¿qué sucede si ese usuario sale a almorzar, por ejemplo? :) Al igual que yo ahora!
Hornbydd

Respuestas:

1

Parece que necesita desarrollar más una herramienta Python personalizada que un modelo en ModelBuilder. xlwto xlutilsen http://www.python-excel.org/ le permitirá escribir en su archivo de Excel ( XlsxWritermanejará 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.

Chad Cooper
fuente
¿Los complementos de Python ya ofrecen opciones sofisticadas de GUI en 10.1+? Pensé que solo .NET y Java AddIns proporcionan estos ... Python solo ofrece AddIns sin ninguna GUI (comandos, herramientas).
Jürgen Zornig
1
@ JürgenZornig No es tan fácil: anothergisblog.blogspot.com/2013/07/…
Chad Cooper
Gracias @ChadCooper. Necesito mantener el modelo en el generador de modelos, por lo que los complementos de Python están bien, pero el modelo como entidad debe estar en el generador de modelos en lugar de una herramienta de Python completa.
the_bonze
@Chad Gracias de todos modos por este bonito tutorial de inicio rápido de ArcPy / Tkinter ... ¡tengo que probar esto!
Jürgen Zornig
1

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:

  1. No requiere ninguna biblioteca externa.
  2. la función de llamada no permite la continuación del script hasta que Excel esté cerrado
  3. Puede especificar el documento de Excel como el segundo argumento.
  4. ¡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

James Milner
fuente