Python-Skript zum Erstellen von Tabellen mithilfe datengesteuerter Seiten

11

Ich versuche, ein Python-Skript so zu konvertieren, dass eine Tabelle (basierend auf einer Datenbank) mit Funktionen angezeigt wird, die sich auf einer bestimmten datengesteuerten Seite befinden. Bisher konnte das Skript die Zuordnung zu einer bestimmten Tabelle erfolgreich aktualisieren, die Tabelle wird jedoch nicht aktualisiert.

Ich habe es als drei Textfelder eingerichtet, die mit drei spezifischen Feldern aktualisiert werden sollen, wenn der Benutzer das Skript über ArcToolbox ausführt.

Irgendwelche Vorschläge, warum meine Tabelle nicht aktualisiert wird?

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")
user5373
quelle
Ich würde zunächst versuchen, Ihr Skript auf ein einfacheres Beispiel zu reduzieren. Werden die Objekte vom ListLayoutElementsTyp zurückgegeben TextElement? Können Sie einen einzelnen Textwert im Skript ohne den anderen Code aktualisieren?
scw
Wie gesagt, werden die Elemente tatsächlich zurückgegeben? Ich würde arcpy.AddMessage ("Found Table1Column1") in jede if-Anweisung einfügen und dann arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) in den Bereich if count <30 einfügen. Dies gibt eine bessere Vorstellung davon, wo das Problem auftritt.
Eseglem
Aus dem Code ist nicht ersichtlich, wo die Objekte tab1Col1Txt, tab1Col2Txt und tab1Col3Txt definiert sind. Versuchen Sie zuerst zu überprüfen, was vom row.getValue-Teil zurückgegeben wird
Matej

Antworten:

2

Vielleicht könnten diese Beispiele helfen:

DDP mit dynamischen Tabellen und Grafiken 10.1_v1

Dieses Beispiel zeigt, wie die arcpy.mapping-API verwendet wird, um die Funktionen von Data Driven Pages (DDP) zu erweitern und wirklich dynamische Tabellen und Diagramme für Kartenserien zu erstellen

arcpy.mapping Kartenbuch mit dynamischen Grafiktabellen

Dieses Projekt enthält datengesteuerte Seiten und arcpy.mapping, um eine Kartenserie mit dynamischen Grafiktabellen zu erstellen.

Dror Har Gil
quelle
1
Können Sie mehr Inhalte in Ihren Antworten angeben? Nur-Link-Antworten werden nicht bevorzugt, da sich der Link im Laufe der Zeit ändern kann.
Artwork21