특정 데이터 기반 페이지에있는 기능의 테이블 (dbf 기반)을 표시하도록 일부 Python 스크립트를 변환하려고합니다. 지금까지 특정 테이블에 대한 맵을 새로 고칠 수있는 스크립트가 있지만 테이블을 업데이트하지는 않습니다.
사용자가 ArcToolbox에서 스크립트를 실행할 때 세 개의 특정 필드로 업데이트 해야하는 세 개의 텍스트 상자로 설정되어 있습니다.
내 테이블이 업데이트되지 않는 이유에 대한 제안 사항이 있습니까?
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")
scw가 말했듯이 실제로 요소가 반환됩니까? 각 if 문에 arcpy.AddMessage ( "Found Table1Column1")를 추가 한 다음 if count <30 영역에 arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text)를 추가합니다. 문제가 발생한 위치를 더 잘 알 수 있습니다.
—
eseglem
tab1Col1Txt, tab1Col2Txt 및 tab1Col3Txt 객체가 어디에 정의되어 있는지 코드에서 명확하지 않습니다. 먼저 row.getValue 부분에 의해 반환됩니다 무엇을 확인하려고
—
마테이
ListLayoutElements
유형 으로 반환TextElement
됩니까? 다른 코드없이 스크립트에서 단일 텍스트 값을 업데이트 할 수 있습니까?