He escrito una herramienta que se pide al usuario una ruta de directorio, y, opcionalmente, una sola mxd. Luego se arrastra el directorio para el mxds (o solo el uno) y escribe algunas de las propiedades de las capas en cada mxd a un archivo csv. La mayoría de esto funciona bien, excepto que ninguna de las fuentes de datos que se enumeran. He visto la pregunta aquí, pero no puede ver donde la mina que está mal. El resto de propiedades se escriben muy bien. Gracias por la ayuda.
Editar: Modificado el interior de bucle un poco, sólo para ver lo que había encontrado. La línea:
arcpy.AddMessage('\ndataSource is: {0}'.format(lyr.dataSource))
no mostrar el origen de datos de todas las capas. Corrí en un conjunto más grande de mxds, con sde archivos shapefiles, archivo gdb clases de entidad, los servicios web y las conexiones a los servidores, tales como DÓLARES y nuestro propio servidor. Las únicas fuentes de datos que se imprimió a la csv fueron para los archivos de imagen en los servidores. Las conexiones de estos están en ArcCatalog, que es donde estoy ejecutando la herramienta de. Si eso ayuda.
import arcpy, os, fnmatch, csv
mxddirectory = arcpy.GetParameterAsText(0)
mxd_single = arcpy.GetParameterAsText(1)
outputcsvlocation = arcpy.GetParameterAsText(2)
mxd_list = []
if len(mxd_single) > 0:
mxd_list.append(mxd_single)
else:
for dirpath in os.walk(mxddirectory):
for filename in dirpath[2]:
if fnmatch.fnmatch(filename, '*.mxd'):
mxd_list.append(os.path.join(dirpath[0], filename))
if len(mxd_list) > 0:
outputcsv = open(outputcsvlocation, 'wb')
writer = csv.writer(outputcsv, dialect = 'excel')
writer.writerow(['Mxd path', 'Layer Name', 'Layer Description', 'Layer Source'])
for mxdpath in mxd_list:
mxdname = os.path.split(mxdpath)[1]
try:
mxd = arcpy.mapping.MapDocument(mxdpath)
dfList = arcpy.mapping.ListDataFrames(mxd)
for df in dfList:
for lyr in arcpy.mapping.ListLayers(mxd, '', df):
if lyr.supports('dataSource'):
arcpy.AddMessage('\ndataSource is: {0}'.format(lyr.dataSource))
layerattributes = [mxdpath.encode('utf8'), lyr.longName.encode('utf8'), lyr.description.encode('utf8'), lyr.dataSource.encode('utf8')]
writer.writerow(layerattributes)
else:
arcpy.AddMessage('\nLayer {0} does not support dataSource.'.format(lyr.longName))
except Exception as e:
arcpy.AddMessage('EXCEPTION: {0}\n{1}\n{2}\n'.format(mxdpath, lyr.longName, e))
writer.writerow(['', '', '', ''])
del mxd
outputcsv.close()
else:
arcpy.AddError('No ArcMap documents found')