Python Script para crear una tabla usando páginas controladas por datos

11

Estoy tratando de convertir algún script de python para mostrar una tabla (basada en un dbf) de características ubicadas dentro de una página específica basada en datos. Hasta ahora, tengo el script capaz de actualizar el mapa a la tabla específica, pero no actualiza la tabla.

Lo configuré como tres cuadros de texto que deberían actualizarse con tres campos específicos cuando el usuario ejecuta el script desde ArcToolbox.

¿Alguna sugerencia sobre por qué mi mesa no se actualiza?

import arcpy, sys, os

#Reference current MXD
mxd = arcpy.mapping.MapDocument("current")

#Get input parameter
Name = arcpy.GetParameterAsText(0)

#Reference  data frames
mapatlasDF = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
locatorDF = arcpy.mapping.ListDataFrames(mxd, "Locator Map")[0]

#Reference appropriate layers
atlasLyr = arcpy.mapping.ListLayers(mxd, "PinalCreekMapAtlas_HalfMile", mapatlasDF)[0]
locatorLyr = arcpy.mapping.ListLayers(mxd, "Locator Map", locatorDF)[0]
atlasoutlineLyr = arcpy.mapping.ListLayers(mxd, "Map Atlas Outline", locatorDF)[0]

#Reference layout elements by calling ListLayoutElements 
for elm in arcpy.mapping.ListLayoutElements(mxd):
  if elm.name =="Table1Column1": tab1Col1Txt = elm
  if elm.name =="Table1Column2": tab1Col2Txt = elm
  if elm.name =="Table1Column3": tab1Col3Txt = elm

#Reference the Data Driven Page object
ddp = mxd.dataDrivenPages

#Set the current page to be the one selected in the script tool
arcpy.AddMessage(Name)

pageID = mxd.dataDrivenPages.getPageIDFromName(str(Name))
mxd.dataDrivenPages.currentPageID = pageID

#Set the appropriate definition queries
atlasLyr.definitionQuery = "Name = '" + Name +  "'"
locatorLyr.definitionQuery = "Name = '" + Name +  "'"
atlasoutlineLyr.definitionQuery = "Name <> '" + Name +  "'"

#Update Sheet Index data frame
arcpy.SelectLayerByAttribute_management(locatorLyr, "NEW_SELECTION", "\"Name\" = '" + Name + "'")
locatorDF.panToExtent(locatorLyr.getSelectedExtent())

#Reference Affected Parcels table and select appropriate records
parcelTable = arcpy.mapping.ListTableViews(mxd, "AffectedParcels")[0]

#Build query and create search cursor to loop through rows
parcelFieldValue = "Page " + Name
queryExp = "\"MapPage\" = '" + parcelFieldValue + "'"  #e.g., "MapPage" = 'Page 01'
parcelRows = arcpy.SearchCursor(parcelTable.dataSource, queryExp)

#Clear all table text values
tab1Col1Txt.text = " "; tab1Col2Txt.text = " "; tab1Col3Txt.text = " "

#iteate through each row, update appropiate text
count = 0
for row in parcelRows:
  if count < 30: #Table1 - static position
    tab1Col1Txt.text = tab1Col1Txt.text + row.getValue("OwnerName") +"\n"
    tab1Col2Txt.text = tab1Col2Txt.text + row.getValue("APN") + "\n"
    tab1Col3Txt.text = tab1Col3Txt.text + row.getValue("LengthTrail") + "\n"
  if count ==30:  
    arcpy.AddMessage("Table Overflow") #The code could be reworked to show the last 90 records
  count = count + 1

arcpy.RefreshActiveView()
arcpy.AddMessage("PROCESS COMPLETED")
usuario5373
fuente
Comenzaría intentando reducir su guión a un ejemplo más simple. ¿Los objetos son devueltos por ListLayoutElementstipo TextElement? ¿Puede actualizar un solo valor de texto en el script, sin ninguno de los otros códigos?
scw
como dijo scw, ¿se están devolviendo realmente los elementos? Agregaría arcpy.AddMessage ("Found Table1Column1") en cada declaración if y luego agregaría arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) en el área if count <30. Esto dará una mejor idea de dónde está ocurriendo el problema.
eseglem
Desde el código no está claro dónde están definidos los objetos tab1Col1Txt, tab1Col2Txt y tab1Col3Txt. Primero intente verificar lo que devuelve la parte row.getValue
Matej

Respuestas:

2

Quizás estos ejemplos podrían ayudar:

DDP con tablas dinámicas y gráficos 10.1_v1

Este ejemplo demuestra cómo se utiliza la API arcpy.mapping para ampliar las capacidades de las páginas controladas por datos (DDP) para producir una serie de mapas de tablas y gráficos verdaderamente dinámicos.

arcpy.mapping Libro de mapas con tablas gráficas dinámicas

Este proyecto incorpora páginas controladas por datos y arcpy.mapping para construir una serie de mapas que incluye tablas gráficas dinámicas.

Dror Har Gil
fuente
1
¿Puedes proporcionar más contenido en tus respuestas? No se prefieren las respuestas de solo enlace, ya que el enlace puede cambiar con el tiempo.
artwork21