Skrypt w języku Python do tworzenia tabeli przy użyciu stron opartych na danych


11

Próbuję przekonwertować jakiś skrypt Pythona, aby wyświetlić tabelę (na podstawie dbf) funkcji znajdujących się na określonej stronie opartej na danych. Do tej pory skryptu udało mi się odświeżyć mapę do określonej tabeli, ale nie aktualizuje ona tabeli.

Mam skonfigurowane jako trzy pola tekstowe, które powinny zostać zaktualizowane o trzy określone pola, gdy użytkownik uruchomi skrypt z ArcToolbox.

Wszelkie sugestie dotyczące tego, dlaczego mój stół się nie aktualizuje?

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

Zacznę od ograniczenia twojego skryptu do prostszego przykładu. Czy obiekty są zwracane według ListLayoutElementstypu TextElement? Czy możesz zaktualizować jedną wartość tekstową w skrypcie, bez żadnego innego kodu?
scw

jak powiedział scw, czy elementy rzeczywiście są zwracane? Dodałbym arcpy.AddMessage („Znaleziono Table1Column1”) do każdego statutu if, a następnie dodałbym arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) w obszarze if count <30. To da lepszy obraz tego, gdzie występuje problem.
eseglem,

Z kodu nie jest jasne, gdzie są zdefiniowane obiekty tab1Col1Txt, tab1Col2Txt i tab1Col3Txt. Najpierw spróbuj zweryfikować, co zostanie zwrócone przez część row.getValue
Matej

Odpowiedzi:


2

Być może te przykłady mogą pomóc:

DDP z dynamicznymi tabelami i wykresami 10.1_v1

Ten przykład pokazuje, jak interfejs API arcpy.mapping jest wykorzystywany do rozszerzania możliwości stron opartych na danych (DDP) w celu tworzenia prawdziwie dynamicznych tabel i wykresów serii map

arcpy.mapping Map Book z dynamicznymi tabelami graficznymi

Ten projekt zawiera strony oparte na danych i arcpy.mapping, aby zbudować serię map zawierającą dynamiczne tabele graficzne.


1
Czy możesz podać więcej treści w swoich odpowiedziach? Odpowiedzi tylko na link nie są preferowane, ponieważ z czasem link może ulec zmianie.
artwork21
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.