cl.geologyidea.com
Más

El uso de ArcPy.TableToExcel_conversion en la herramienta de secuencia de comandos elimina los datos agregados automáticamente

El uso de ArcPy.TableToExcel_conversion en la herramienta de secuencia de comandos elimina los datos agregados automáticamente


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


Estoy usandoArcGIS for Desktop 10.3.0.4322.

Tengo un suceso peculiar que no entiendo del todo. Tengo una herramienta de secuencia de comandos de Python que hace varias cosas diferentes, para incluir el uso deMódulo de mapeo ArcPypara agregar datos recién adquiridos alACTUAL.mxd para su visualización. Esto funciona perfectamente bien, excepto cuando se ejecuta un poco de código adicional (parte inferior de la publicación), que opcionalmente usa (según la entrada del usuario) elarcpy.TableToExcel_conversionherramienta para proporcionar al usuario una versión de hoja de cálculo de Excel de los datos de la clase de entidad que consultaron. Al observar la ejecución del script, la nueva clase de entidad,queryLayer, aparece en la tabla de contenido de .mxd, solo para desaparecer inmediatamente después. Mientras investiga, la clase de entidad todavía existe y está bien (como era de esperar), ya quearcpy.TableToExcel_conversionLa herramienta no elimina el archivo de origen, simplemente crea uno recién convertido. Entonces, es obvio que algo está sucediendo mientras / después de que se realiza la conversión (ya que sin la conversión funciona bien), pero no entiendo por qué eliminaría la clase de entidad recién agregada del marco de datos / TOC de .mxd .

En mis continuos esfuerzos por solucionar este incidente, he aprendido algo aún más desconcertante. Mientras estoy en la GUI de la herramienta de secuencia de comandos, si elijo deliberadamente dejar las entradas opcionales de Excel en blanco, por lo tanto, llego a dondeTableToExcelLa herramienta no se ejecutará, los datos de la clase de entidad aún se eliminan del TOC. Por otra parte, para reconfirmar lo que ya sabía, codifiqué (#) el código de Excel, y he aquí, funcionó perfectamente bien y la clase de entidad se agregó al TOC (y se quedó). No tengo idea de por qué / cómo podría estar pasando esto.

EDITAR (6 DE JULIO DE 2015): Al intentar ejecutar elTableToExcel_conversionantes del código ArcPy Mapping, recibo este error:

Traceback (última llamada más reciente): Archivo "C: Users lwilson Desktop test.py", línea 156, en addLayer = arcpy.mapping.Layer (queryLayer) # Establecer variable para queryLayer File "c: archivos de programa (x86) arcgis desktop10.3 arcpy arcpy arcobjects mixins.py ", línea 389, en en eso super (LayerMixin, uno mismo).en eso(lyrfile) Archivo "c: archivos de programa (x86) arcgis desktop10.3 arcpy arcpy arcobjects_base.py", línea 47, en en eso para arg en args)) ValueError: Object: CreateObject Layer fuente de datos no válida

No estoy muy seguro de cómo la capa es de repente una fuente de datos no válida debido al cambio en el orden en que se ejecuta el código.

# import arcpy module import arcpy # Pida al usuario que seleccione el espacio de trabajo de la geodatabase para usar para la salida de datos userWorkspace = arcpy.GetParameterAsText (0) # Establezca el entorno del espacio de trabajo según la elección del usuario arcpy.env.workspace = userWorkspace # Pida al usuario que seleccione un dB de Oracle Conexión oracleDB = arcpy.GetParameterAsText (1) # Pida al usuario que nombre la capa de consulta queryLayer = arcpy.GetParameterAsText (2) # Pregunte al usuario si desea sobrescribir la capa de consulta anteriormente nombrada sobreescrituraQ = arcpy.GetParameterAsText (3) # Pida al usuario una Expresión de consulta SQL que se ejecutará contra el dB de Oracle seleccionado sqlQuery = arcpy.GetParameterAsText (4) # Pídale al usuario que nombre la salida del archivo de Excel (esto es opcional, para aquellos que quieran hacer un análisis de Excel) excelName = arcpy.GetParameterAsText (5 ) # Pregunte al usuario si desea sobrescribir el archivo de Excel previamente nombrado sobreescrituraE = arcpy.GetParameterAsText (6) # Pida al usuario que seleccione la salida de la carpeta del archivo de Excel (opcional también, dependiendo de si el usuario quiere un archivo de Excel) excelFol der = arcpy.GetParameterAsText (7) # Crear una variable de referencia espacial para asignar a queryLayer SpatialRef = arcpy.SpatialReference ("W:  Coordinate Systems  LRS Lambert.prj") # Proceso: 'Hacer Query Layer' - Crea una Query Layer usando la expresión de consulta SQL y Oracle dB del usuario arcpy.MakeQueryLayer_management (oracleDB, "Temp_Layer", sqlQuery, "UNIQUE_ID", "POINT", "1050010", SpacialRef) # Establecer la salida de sobrescritura para la Capa de consulta a elección del usuario arcpy.env.overwriteOutput = OverriteQ # Proceso: 'Copiar funciones': copia la capa de consulta temporal y la almacena como una clase de entidad permanente arcpy.CopyFeatures_management ("Temp_Layer", queryLayer) # Proceso: 'Eliminar funciones' - Elimina el archivo temporal Temp_Layer # Esto permite múltiples ejecuciones de esta herramienta dentro de la misma sesión de ArcMap sin error arcpy.Delete_management ("Temp_Layer") # Proceso: 'Definir proyección' - Define la proyección de la salida de clase de entidad queryLayer arcpy.DefineProjection_management (queryLayer, SpatialRef) # Pr ocess: 'Add Field' - Agrega nuevos campos de columna a queryLayer arcpy.AddField_management (queryLayer, "First_Time", "DATE") # El primer LOGDT ping arcpy.AddField_management (queryLayer, "Last_Time", "DATE") # El último LOGDT ping arcpy.AddField_management (queryLayer, "Total_Time", "STRING") # Suma del primero al último ping en el tiempo arcpy.AddField_management (queryLayer, "Total_Pings", "INTEGER") # Número total de pings (filas) arcpy.AddField_management (queryLayer, "Possible_Pings", "INTEGER") # Número total de pings posibles en un período de tiempo determinado arcpy.AddField_management (queryLayer, "Time_to_Process", "DATE") # Cuánto tiempo tardó en procesarse cada ping # Calcula el número total de filas (pings) para el campo Total_Pings numRows = int (arcpy.GetCount_management (queryLayer) .getOutput (0)) # UpdateCursor que escribirá el valor de numRows en el campo Total_Pings cursor = arcpy.da.UpdateCursor (queryLayer, "Total_Pings" ) para la fila en el cursor: fila [0] = numRows cursor.updateRow (fila) # SearchCursor t que leerá los valores de LOGDT y devolverá el primer valor (el más antiguo) intente: # intente leer valores basados ​​en la consulta SQL del usuario firstLogdt = [fila [0] para la fila en arcpy.da.SearchCursor (queryLayer, "LOGDT" )] [0] excepto: # error de excepción si la consulta SQL del usuario no produce ningún retorno err = "No se encontraron resultados a través de la consulta SQL  nSCRIPT EXITED" # Mensaje de error variable arcpy.AddError (err) # Imprimir mensaje de error sys.exit () # Sale del script, no intenta ejecutar más # UpdateCursor que escribirá el primer valor LOGDT (el más antiguo) en el campo First_Time cursor = arcpy.da.UpdateCursor (queryLayer, "First_Time") para la fila en el cursor: fila [0 ] = firstLogdt cursor.updateRow (fila) # SearchCursor que leerá los valores de LOGDT y devolverá el último valor (más reciente) lastLogdt = [fila [0] para la fila en arcpy.da.SearchCursor (queryLayer, "LOGDT")] [ -1] # UpdateCursor que escribirá el último (último) valor de LOGDT en el campo Last_Time cursor = arcpy.da.UpdateCursor (queryLayer, "Last_Time") para la fila en el cursor: fila [ 0] = lastLogdt cursor.updateRow (fila) # Calcula la diferencia entre firstLogdt y lastLogdt timeDiff = lastLogdt - firstLogdt # Produce un objeto timedelta, no datetime # Calcula el número total de segundos desde timeDiff timeSecs = timeDiff.total_seconds () # Crea un función que convertirá timeSecs a un formato legible (aa: dd: hh: mm: ss) def readTime (segundos): minutos, segundos = divmod (segundos, 60) horas, minutos = divmod (minutos, 60) días, horas = divmod (horas, 24) años, días = divmod (días, 365) return '% 02d:% 02d:% 02d:% 02d:% 02d'% (años, días, horas, minutos, segundos) # UpdateCursor que escribirá el cálculo de la diferencia de tiempo para el campo Total_Time cursor = arcpy.da.UpdateCursor (queryLayer, "Total_Time") para la fila en el cursor: fila [0] = readTime (timeSecs) cursor.updateRow (fila) # Calcula el número total de pings que ocurriría con una recepción óptima posible Pings = timeSecs / 5 # 1 ping cada 5 segundos # UpdateCursor que escribirá el número total de pings posibles archivo al campo Possible_Pings cursor = arcpy.da.UpdateCursor (queryLayer, "Possible_Pings") para la fila en el cursor: fila [0] = possiblePings cursor.updateRow (fila) # Usando el módulo de mapeo ArcPy para agregar queryLayer a la visualización del mapa .mxd actual y acercarla mxd = arcpy.mapping.MapDocument ("CURRENT") # Establecer variable en .mxd dataFrame = arcpy.mapping.ListDataFrames (mxd) [0] # Establecer variable igual al primer marco de datos dentro de mxd addLayer = arcpy. # Establezca la salida de sobrescritura para el archivo de Excel a elección del usuario arcpy.env.overwriteOutput = oversriteE # Cambie el entorno del espacio de trabajo al lugar donde el usuario desea que se guarde el archivo de Excel intente: # Intenta cambiar el espacio de trabajo del entorno a la carpeta de salida de Excel opcional del usuario arcpy. env.workspace = excelF anterior excepto: pasar # Si el usuario no especificó la entrada de la carpeta de Excel, deje pasar y continúe con # Proceso: 'Tabla a Excel' - Convierte los datos finales consultados en un archivo de hoja de cálculo de Excel (opcional) intente: # Intenta ejecutar la herramienta (solo funcionará si el usuario especifica entradas de Excel opcionales) arcpy.TableToExcel_conversion (queryLayer, excelName + '. xls') excepto: pass # Si el usuario no especificó entradas de Excel opcionales, deje pasar y continúe # eliminar cursor, variables de fila del cursor , fila

Tuve el mismo problema. Simplemente invirtí el orden de las operaciones exportando para sobresalir primero y luego agregando la capa. O si eso no funciona, puede volver a agregar la capa, ¿no?


Ver el vídeo: how to import excel data to ArcGIS pro


Comentarios:

  1. Macray

    En él algo es. Gracias por la ayuda en esta pregunta.

  2. Khatib

    Gracias, ¿puedo también ayudarte con algo?

  3. Spyridon

    Que palabras... ciencia ficcion

  4. Totilar

    los felicito, fueron visitados con simplemente excelente idea



Escribe un mensaje