Veriye Dayalı Sayfaları Kullanarak Tablo Oluşturmak için Python Komut Dosyası


11

Belirli bir veri odaklı sayfada bulunan özelliklerin bir tablo (bir dbf dayalı) görüntülemek için bazı python komut dosyası dönüştürmek çalışıyorum. Şimdiye kadar, komut dosyasını haritayı belirli bir tabloya başarıyla yenileyebiliyorum, ancak tabloyu güncellemiyor.

Kullanıcı ArcToolbox komut dosyasını çalıştırdığında üç belirli alanlarla güncelleştirilmesi gereken üç metin kutusu olarak ayarlanmış var.

Masamın neden güncellenmediğine dair herhangi bir öneriniz var mı?

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

Daha basit bir örnek için senaryonuzu kesmeye çalışarak başlardım. Nesneler tarafından iade edilen ListLayoutElementsÇeşidi TextElement? Koddaki diğer bir kod olmadan tek bir metin değerini güncelleyebilir misiniz?
scw

scw'nin dediği gibi, öğeler gerçekten iade ediliyor mu? Her if deyimine arcpy.AddMessage ("Found Table1Column1") ve if sayısı <30 alanına arcpy.AddMessage (tab1Col1Txt.text + tab1Col2Txt.text + tab1Col3Txt.text) eklerdim. Bu, sorunun nerede oluştuğu hakkında daha iyi bir fikir verecektir.
eseglem

Kod net değilken tab1Col1Txt, tab1Col2Txt ve tab1Col3Txt nesneleri tanımlanmıştır. Önce row.getValue bölümü tarafından neyin geri döndüğünü doğrulamaya çalışın
Matej

Yanıtlar:


2

Belki de bu örnekler yardımcı olabilir:

Dinamik Tablolar ve Grafiklerle DDP 10.1_v1

Bu örnek, arcpy.mapping API'sının bir veri serisi gerçekten dinamik tablolar ve grafikler oluşturmak için Veriye Dayalı Sayfaların (DDP) yeteneklerini genişletmek için nasıl kullanıldığını gösterir

arcpy.mapping Dinamik Grafik Tabloları ile Harita Kitabı

Bu proje, dinamik grafik tabloları içeren bir harita serisi oluşturmak için Veriye Dayalı Sayfalar ve arcpy.mapping öğelerini içerir.


1
Yanıtlarınızda daha fazla içerik sağlayabilir misiniz? Link sadece cevaplar tercih edilmez, çünkü link zaman içinde değişebilir.
artwork21
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.