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.
I figured how to do it. I just need to change it, the way i want one time, than save a .lyr from the correct information (it can also change symbology, and other stuff).
The script below, will apply the .lyr file to your layer in the TOC. You just must specify the name of the layer, like displayed in TOC.
It will do to all MXD files, in the same folder of the script.
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()
I'm fairly certain that a layer label value is not exposed with the arcpy module and therefore cannot be changed with arcpy.
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.
Sheesh I'm slipping.... I remember looking at that about a month ago and reminding myself to use that if needed sometime.
Please, try to remember it!!! i really need to change this automatically!!!
help me!
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)[0]
>>> lbl = lyr.labelClasses[0]
>>> lbl.expression = '[NEW_FIELD]'
>>> arcpy.RefreshActiveView()
>>>
Thanks Joshua
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