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, count2
class 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.""" return
rows = 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 properly
text_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