I want to change this information, with python:
I have this code (got here: https://community.esri.com/thread/43148 ) , but it changes the layer name. I want to change layer label.
It is a simple feature, with no unique values.
import arcpy, os from arcpy import env env.workspace = os.curdir for mxdFile in arcpy.ListFiles("*.mxd"): mxdPath = env.workspace + "\\" + mxdFile mxd = arcpy.mapping.MapDocument(mxdPath) layers = arcpy.mapping.ListLayers(mxd) for lyr in layers: if lyr.name == "old name": lyr.name = "newname" arcpy.RefreshTOC() mxd.save()
Solved! Go to Solution.
import arcpy, os from arcpy import env env.workspace = os.curdir for mxdFile in arcpy.ListFiles("*.mxd"): mxdPath = env.workspace + "\\" + mxdFile mxd = arcpy.mapping.MapDocument(mxdPath) layers = arcpy.mapping.ListLayers(mxd) for lyr in layers: if lyr.name == "layer_name_in_TOC": #change here print mxdPath symbologyLayer = r"D:\LayerFile.lyr" #change here arcpy.ApplySymbologyFromLayer_management (lyr, symbologyLayer) arcpy.RefreshTOC() mxd.save()
Hi Ian, Here a year later. Can I edit labels so that I allocate a field in a layer manually or through arcpy? It is denoted as read/write but cant edit it other than through TOC.
I wonder if you can use UniqueValuesSymbology—Help | ArcGIS for Desktop but "trick" the unique value to only have one. then use one of these properties?
I didn't see a set of properties for no-unique-values otherwise.
The problem is, i need to change it in several mxds. More than 1000... And it would make changes in the legend in layout also, because would add 'headings', for example...
Thats why i want to try this way!! but thanks for the help...
I doubt it would change your legend unless your legend item for that layer was already using a style item that used the layer heading. You could always change your legend item style to use only the layer name, or layer name and label only if you didn't want an heading added to them.
What version of ArcMap are you using? What is your current code and result?
I have ArcMap 10.6, and I can change the label class to point to a different field and it works fine:
>>> mxd = arcpy.mapping.MapDocument("CURRENT") >>> lyr = arcpy.mapping.ListLayers(mxd) >>> lbl = lyr.labelClasses >>> lbl.expression = '[NEW_FIELD]' >>> arcpy.RefreshActiveView() >>>
I applied the code, it changes the expression label field as below and that is fine
What I need though is the TOC to maintain the value field assigned under symbology properties but allow me to use another field in the layer as a label or to copy the corresponding values into TOC. What I mean I want for instance the values below in the OpCodeBoundaries. The value field set in symbology is say field A. I want to maintain that but change the display in the TOC window to display values in Field B. Effectively, that will change the display in the legend