import arcpy mxd = arcpy.mapping.MapDocument("CURRENT") ### set layer lyr = "StructurePnt" fieldList = arcpy.ListFields(lyr) desc = arcpy.Describe(lyr) fieldInfo = desc.fieldInfo ### field index number fldIndxNum = 6 fieldInfo.setVisible( fldIndxNum, 'NOT VISIBLE' ) print "\tField Name: " + fieldInfo.getFieldName(fldIndxNum) print "\tVisible: " + fieldInfo.getVisible(fldIndxNum) arcpy.RefreshActiveView() arcpy.RefreshTOC()
Has ESRI updated this yet? I need to be able to use a script to turn off certain fields for a Feature Class without creating a new layer?
I find it useful sometimes to run the geoprocessing tool and then right click the green ribbon > Copy Python Command-- that is, if the tool runs successfully. Then copy that into your python editor. You can see how the parameters should look.
I have gotten a script to run but I am getting a runtime error, any ideas? the error happens at fields
import arcpy
from arcpy import env
arcpy.env.overwriteOutput = True
arcpy.env.addOutputsToMap = False
arcpy.env.workspace = "C:/temp"
out_layer = "temp.lyr"
mxd = arcpy.mapping.MapDocument('CURRENT')
df = arcpy.mapping.ListDataFrames(mxd, '*')[0] # need to find way to get list of layers there can be more than one data frame
listfields = []
thebadlist = []
for LayerNeedsFieldsTurnedOff in arcpy.mapping.ListLayers(mxd):
if LayerNeedsFieldsTurnedOff.isGroupLayer:
print "group print"
elif LayerNeedsFieldsTurnedOff.isFeatureLayer:
fields = dict((f.name, []) for f in arcpy.ListFields(LayerNeedsFieldsTurnedOff) if not f.required)
rows = arcpy.SearchCursor(LayerNeedsFieldsTurnedOff,"","","","")
for row in rows:
for f in fields.keys():
fields
#print row.getValue(f)
for field, values in fields.iteritems():
#print field
if field == "Shape":
listfields.append(field)
elif all(map(lambda s: s is None or not str(s).strip(), values)):
thebadlist.append(field)
else:
listfields.append(field)
# LayerNeedsFieldsTurnedOff = arcpy.mapping.ListLayers(mxd, 'exampledata', df)[0]
# fill in your desired fields to remain visible
desiredFields = listfields
field_info = arcpy.Describe(LayerNeedsFieldsTurnedOff).fieldInfo # I need this for field count
for i in range(field_info.count):
if field_info.getfieldname(i) not in desiredFields:
if field_info.getfieldname(i) == "SHAPE":
field_info.setvisible(i, 'VISIBLE')
elif field_info.getfieldname(i) == "Shape":
field_info.setvisible(i, 'VISIBLE')
else:
field_info.setvisible(i, 'HIDDEN')
arcpy.SaveToLayerFile_management(LayerNeedsFieldsTurnedOff, out_layer)
arcpy.MakeFeatureLayer_management(LayerNeedsFieldsTurnedOff, 'temp_layer', '', '', field_info)
refLyr = arcpy.mapping.Layer('temp_layer')
# rename the ref layer the same as your target layer
refLyr.name = LayerNeedsFieldsTurnedOff.name
lyrfile = "C:/temp/temp.lyr"
print LayerNeedsFieldsTurnedOff.name
arcpy.ApplySymbologyFromLayer_management(refLyr, lyrfile)
arcpy.mapping.UpdateLayer(df, LayerNeedsFieldsTurnedOff, refLyr, False)
# mxd.save()
print 'cleaning up-'
if arcpy.Exists('temp_layer'):
print '\'temp_layer\' still in memory...deleting now...'
arcpy.Delete_management('temp_layer')
print 'deleting obj refs...'
del LayerNeedsFieldsTurnedOff, refLyr, fields, f, i
print 'done.'