import arcpy mxd = arcpy.mapping.MapDocument("Current") mapLyr = arcpy.mapping.ListLayers(mxd, "Detail_2013")[0] concatElem = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "concat")[0] rows = arcpy.SearchCursor(mapLyr.dataSource) row = rows.next() typeElem.text = row.getValue("CONCAT") mxd.save() del mxd, row, rows,Solved! Go to Solution.
import arcpy, os #set map doc and the layer to be used mxd = arcpy.mapping.MapDocument("Current") mapLyr = arcpy.mapping.ListLayers(mxd, "Detail_2013")[0] #Get page number from data driven page - specified in the tool parameter dialogue box pageNum = arcpy.GetParameterAsText(0) ddp = mxd.dataDrivenPages arcpy.AddMessage(pageNum) pageID = mxd.dataDrivenPages.getPageIDFromName(pageNum) mxd.dataDrivenPages.currentPageID = pageID #Set layer definition query, this contols the rowcount variable pageFieldValue = pageNum mapLyr.definitionQuery = '"pageNum" = %s' % pageNum #Listing the text elements on the page concatElem1 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "concat1")[0] concatElem2 = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "concat2")[0] #Finds the number of features in the map and sets up the lists to evenly distribute into the two text elements/columns rowcount = int(arcpy.GetCount_management("Detail_2013").getOutput(0)) percolumn = round(rowcount / 2.0) count1 = 1 count2 = rowcount #Specifies the features being used for the SearchCursor rows = arcpy.SearchCursor(mapLyr, "", "", "CONCAT") fieldrow = arcpy.SearchCursor(mapLyr, "", "", "pageNum") currentpage = "" text_var1 = str() text_var2 = str() #The first for and if block limits the searched rows to the definition query #The seconded/indented for and if block adds the text fields to the text elements for row in fieldrow: if currentpage != row.pageNum: currentpage = row.pageNum for row in rows: if count1 <= percolumn: text_var1 += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep) concatElem1.text = text_var1 count1 += 1 elif count2 > percolumn: text_var2 += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep) concatElem2.text = text_var2 count2 - 1 else: pass else: pass #Removed the definition query so all page numbers appear when the script is run next and refresh he layout view mapLyr.definitionQuery = "" arcpy.RefreshActiveView() del mxd, row, rows, rowcount, percolumn, count1, count2class ToolValidator: """Class for validating a tool's parameter values and controlling the behavior of the tool's dialog.""" def __init__(self): """Setup the Geoprocessor and the list of tool parameters.""" import arcpy self.params = arcpy.GetParameterInfo() def initializeParameters(self): """Refine the properties of a tool's parameters. This method is called when the tool is opened.""" import arcpy, os, sys #Reference Plat Index Layer to get unique Plat Numbers mxd = arcpy.mapping.MapDocument("CURRENT") mapLyr = arcpy.mapping.ListLayers(mxd, "Detail_2013")[0] #Iterate rows in Plat Index Layer to generate unique name list rows = arcpy.SearchCursor(mapLyr) row = rows.next() #Create and populate list uniqueList = [] while row: #If the value is not already in the list, append it if row.getValue("pageNum") not in uniqueList: uniqueList.append(row.getValue("pageNum")) row = rows.next() #Sort the list alphanumerically uniqueList.sort() self.params[0].filter.list = uniqueList self.params[0].value = uniqueList[0] return def updateParameters(self): """Modify the values and properties of parameters before internal validation is performed. This method is called whenever a parmater has been changed.""" return def updateMessages(self): """Modify the messages created by internal validation for each tool parameter. This method is called after internal validation.""" returnrows = arcpy.SearchCursor(mapLyr.dataSource)
text_var = str()
for row in rows:
text_var += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep)
typeElem.text = text_var
import arcpy
mxd = arcpy.mapping.MapDocument("Current")
mapLyr = arcpy.mapping.ListLayers(mxd, "Detail_2013")[0]
addrElem = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "concat1")[0]
rows = arcpy.SearchCursor(mapLyr.dataSource)
text_var = str()
for row in rows:
text_var += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep)
addrElem.text = text_var
mxd.save()
del mxd, row, rows,>>> help(arcpy.GetCount_management) Help on function GetCount in module arcpy.management: GetCount(in_rows=None) GetCount_management(in_rows) Returns the total number of rows for a feature class, table, layer, or raster. INPUTS: in_rows (Table View or Raster Layer): The input feature class, table, layer, or raster. If a selection is defined on the input, only its rows are returned. >>>
rowcount = int(arcpy.GetCount_management("Detail_2013").getOutput(0))
percolumn = round(rowcount / 2.0)import arcpy, os
mxd = arcpy.mapping.MapDocument("Current")
mapLyr = arcpy.mapping.ListLayers(mxd, "Detail_2013")[0]
concat1Elem = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "concat1")[0]
concat2Elem = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "concat2")[0]
rowcount = int(arcpy.GetCount_management("Detail_2013").getOutput(0))
percolumn = round(rowcount / 2.0)
rows = arcpy.SearchCursor(mapLyr.dataSource)
crnum = int()
for crashnum in rows:
crnum = row.getValue("Crash_Num")
if crnum <= percolumn:
text_var = str()
for row in rows:
text_var += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep)
concat1Elem.text = text_var
else:
text_var = str()
for row in rows:
text_var += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep)
concat2Elem.text = text_var
mxd.save()
del mxd, row, rows, crnum,
print "First column should have :" + str(percolumn) + " rows." #used to check that it calculated properlytext_var = str()
count = 0
for row in rows:
if count < percolumn:
text_var += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep)
count += 1
elif count == percolumn:
concat1Elem.text = text_var
text_var = str()
else:
text_var += '{0}{1}'.format(row.getValue("CONCAT"), os.linesep)
concat2Elem.text = text_var