Resumen
Exporta un informe tabular con formato utilizando datos de capas o tablas independientes de un documento de mapa junto con la información de plantilla de informe que se proporciona en un archivo de diseño de informe (.rlf).
Debate
La función ExportReport proporciona un mecanismo para automatizar la generación de los informes usando capas o tablas creadas en un documento de mapa (.mxd) o capas de un archivo de capa (.lyr). Un archivo de diseño de informe creado en ArcMap es una plantilla que almacena información sobre el contenido y la ubicación de los elementos en un informe. El archivo de diseño de informe se usa con los datos de origen de un documento de mapa para crear informes de salida. Los datos de origen también pueden tener uniones asociadas y la información de tabla relacionada que se usa en el informe.
Los datos de origen deben existir en un documento de mapa (.mxd) o en un archivo de capa (.lyr) y los nombres de campos del dataset deben coincidir con los del archivo de diseño de informe con el fin de que ExportReport se ejecute correctamente. Se puede usar un archivo de diseño de informe con diferentes fuentes de datos, siempre que el origen de datos tenga los mismos nombres de campos del dataset. Si los datos son similares pero los nombres de campos de la fuente de datos son distintos, el parámetro field_map se puede usar para volver a asignar los campos del archivo de diseño de informe a diferentes nombres de campos del dataset de origen.
Hay numerosos elementos creados en un archivo de diseño de informe de ArcMap que no se exponen directamente a través de la función ExportReport. Puede ser necesario crear un conjunto de plantillas específicas para generar y exportar distintas situaciones de informes.
Las herramientas de creación de informes de la interfaz de usuario de ArcMap tienen un botón denominado Opciones de dataset. Esto permite al autor elegir una de las cuatro formas de procesar los registros: Todo, Conjunto seleccionado, Extensión visible y Consulta de definición. El parámetro dataset_option tiene el mismo propósito y toma una palabra clave. Un ajuste de dataset_option de ALL o SELECTED procesará los registros adecuados. Si dataset_option se ha definido como DEFINITION_QUERY, se debe proporcionar una cadena de caracteres válida para el parámetro report_definition_query. Si dataset_option se ha definido como EXTENT, se debe proporcionar un objeto Extensión válido para el parámetro extent.
Como en la interfaz de usuario, solo es posible usar una palabra clave de dataset_option cada vez. Por ejemplo, en la interfaz de usuario, no es posible procesar solo el conjunto seleccionado de registros y solo los de la extensión visible. La misma regla se aplica en el caso de la función ExportReport: los parámetros se deben definir de uno en uno. Si se define más de uno de estos parámetros, se sobrescribirán entre sí. Sin embargo, se pueden combinar los atributos estándar de ArcPy y las funciones de consulta espacial y se pueden asociar con un valor de SELECTED para que el parámetro dataset_option genere el informe final deseado. A continuación, se muestra un ejemplo.
El parámetro page_range permite generar un informe solo para un subconjunto de páginas. Puede ser un grupo continuo de páginas (5-12) o incluso un grupo discontinuo de páginas (3,7). En estos casos, cuando genere un informe y starting_page_number se haya definido como 1, los números de página impresos coincidirán con los que haya introducido (Página 3, Página 7). Esto se diseñó para situaciones en las que solo se va a imprimir un número seleccionado de páginas para insertarlas en informes ya existentes. Si la situación exige que los números de página de salida sean continuos, por ejemplo (Página 1, Página 2), debe definir starting_page_number de modo que coincida con el número de página de interés y definir page_range como una sola página. Esto significa que ExportReport se tendrá que ejecutar una vez por cada página; por ejemplo, una vez con starting_page_number = 3, page_range="3" y de nuevo con starting_page_number = 7, page_range="7".
El parámetro field_map solo es necesario si los nombres de campos del dataset difieren entre source_data y los nombres de campos utilizados para generar el archivo de diseño de informe. Al crear field_map, solo los campos utilizados en el informe se tienen que agregar al diccionario. Si los campos se eliminan del diccionario de mapa de campos, se eliminarán también del informe. Los campos asignados deben tener tipos de datos idénticos, y los nombres de campos de field_map distinguen entre mayúsculas y minúsculas.
Es posible usar arcpy.mapping para crear informes con el fin de insertar un mapa en el informe. Las imágenes de un informe tienen una propiedad denominada Imagen de origen. Arcpy.mapping no tiene acceso a este valor, pero si el valor de la imagen de origen apunta a una ruta del disco, arcpy.mapping puede actualizar el archivo en el disco con una operación de exportación, y el motor de informes usará la imagen que esté disponible. En un ejemplo de páginas controladas por datos, puede cambiar la imagen en función de la extensión actual, por ejemplo, con arcpy.mapping antes de llamar a la siguiente página. A continuación, se muestra un ejemplo.
Para obtener más información sobre la creación de informes en ArcGIS, consulte los siguientes temas de introducción:
Sintaxis
ExportReport (report_source, report_layout_file, output_file, {dataset_option}, {report_title}, {starting_page_number}, {page_range}, {report_definition_query}, {extent}, {field_map})
Parámetro | Explicación | Tipo de datos |
report_source | Object | |
report_layout_file | Una cadena de caracteres que representa la ruta y el nombre del archivo de diseño de informe (.rlf). | String |
output_file | Una cadena de caracteres que representa la ruta y el nombre del archivo de salida. La extensión del archivo especificado controla el formato de salida. Se admiten los siguientes formatos y extensiones: .htm, .html, .pdf, .rtf, .tif, .tiff, .txt y .xls. | String |
dataset_option | Una palabra clave que especifica qué filas del dataset se procesarán en el informe de salida. Este valor invalidará el valor Opciones de dataset almacenado en el archivo de diseño de informe que se encuentra en el cuadro de diálogo Propiedades del informe. Si el parámetro dataset_option no se ha definido, cambiará al valor predeterminado almacenado en el archivo de diseño de informe. Si dataset_option se ha definido como DEFINITION_QUERY, se debe proporcionar una cadena de caracteres válida para el parámetro report_definition_query. Si dataset_option se ha definido como EXTENT, se debe proporcionar un objeto Extent válido para el parámetro extent. Como la palabra clave dataset_option controla qué parámetro adicional se debe usar, estos parámetros se deben ajustar de uno en uno, como en la interfaz de usuario.
(El valor predeterminado es USE_RLF) | String |
report_title | Cadena de caracteres que representa el título del informe que aparece en la sección de encabezado del archivo de diseño de informe. | String |
starting_page_number | Un número que representa el número de la página impresa de la primera página del informe de salida. Este valor resulta útil para modificar los números de página de los informes que se anexan al final de los documentos existentes. (El valor predeterminado es 1) | Long |
page_range | Una cadena de caracteres que identifica las páginas del informe que se deben exportar al archivo (por ejemplo, 1, 3, 5–12). | String |
report_definition_query | Una cadena de caracteres que representa una consulta de definición válida que controla qué filas se exportarán al informe de salida. Este parámetro solo se puede definir si el parámetro dataset_option se ha definido como DEFINITION_QUERY. Este valor sobrescribirá la configuración almacenada en el archivo de diseño de informe. Si la capa o la tabla report_source tiene una consulta de definición, se aplicará report_definition_query al subconjunto existente de registros. | String |
extent | Un objeto Extent. Este parámetro solo se puede definir si el parámetro dataset_option se ha definido como EXTENT. Cuando se transfiere un objeto extent a este parámetro, las filas se basan en las entidades que se intersecan con la extensión. | Extent |
field_map | Este parámetro permite usar un archivo de diseño de informe con una fuente de datos que tenga tipos de datos similares, pero nombres de campo distintos. Se usa un diccionario de nombres de campos mapeados para volver a asignar los campos empleados en el archivo de diseño de informe a los nuevos campos de la fuente de datos. La siguiente imagen muestra un ejemplo de la estructura del diccionario field_map:
| Dictionary |
Muestra de código
Ejemplo de ExportReport 1
La siguiente secuencia de comandos exportará un informe a un archivo PDF usando las entidades seleccionadas de la capa en el documento de mapa. Como se están omitiendo otros parámetros opcionales, el nombre del parámetro extent se introduce explícitamente.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0]
lyr = arcpy.mapping.ListLayers(mxd, "Accidents", df)[0]
arcpy.mapping.ExportReport(lyr,
r"C:\Project\Project.rlf",
r"C:\Project\Output\ProjectReport.pdf",
"EXTENT",
extent=df.extent)
del mxd
Ejemplo de ExportReport 2
La siguiente secuencia de comandos es similar a la anterior, pero usa una capa de un archivo de capa como referencia.
lyr = arcpy.mapping.Layer(r"C:\Project\Layers\Transportation.lyr")
arcpy.mapping.ExportReport(lyr,
r"C:\Project\Project.rlf",
r"C:\Project\Output\ProjectReport.pdf",
"EXTENT",
extent=df.extent)
del mxd
Ejemplo de ExportReport 3
La siguiente secuencia de comandos amplía el ejemplo anterior para demostrar cómo se combinan una selección espacial y una selección de atributos para generar el informe deseado. Esto es necesario porque solo se puede usar un dataset_option cada vez. Los resultados se combinan en una selección y usan un valor de SELECTED para el parámetro dataset_option.
import arcpy mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd") df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0] lyr = arcpy.mapping.ListLayers(mxd, "Accidents", df)[0]
#The DataFrame extent object is converted into a polygon feature so it can be used with the SelectLayerByLocation function. dfAsFeature = arcpy.Polygon(arcpy.Array([df.extent.lowerLeft, df.extent.lowerRight, df.extent.upperRight, df.extent.upperLeft]), df.spatialReference) arcpy.SelectLayerByLocation_management(lyr, "INTERSECT", dfAsFeature, "", "NEW_SELECTION") arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", "\"Accidents\" > 3") arcpy.mapping.ExportReport(lyr, r"C:\Project\Project.rlf", r"C:\Project\Output\ProjectReport.pdf", "SELECTED")
del mxd
Ejemplo de ExportReport 4
La siguiente secuencia de comandos usa un archivo de diseño de informe existente con un dataset diferente con distintos nombres de campos. Se usa un nuevo título para sobrescribir el título del archivo de diseño de informe y los campos se vuelven a asignar usando el parámetro field_map.
import arcpy mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd") df = arcpy.mapping.ListDataFrames(mxd, "Transportation")[0] lyr = arcpy.mapping.ListLayers(mxd, "Traffic Lights", df)[0] arcpy.mapping.ExportReport(lyr, r"C:\Project\Project.rlf", r"C:\Project\Output\ProjectReport.pdf", report_title="Traffic Light Coordinates", field_map={'Accidents':'LightID','X':'Longitude','Y':'Latitude'})
del mxd
Ejemplo de ExportReport 5
La siguiente secuencia de comandos muestra cómo insertar un mapa en un informe. Se genera un informe de varias páginas. Cada página tiene una imagen grande que muestra la extensión del marco de datos actual y un informe que proporciona información sobre las entidades incluidas en la extensión. Una vez que se cambia cada extensión del marco de datos, este se exporta a un archivo .emf y ExportReport se usa para crear un solo PDF. Todas las páginas se combinan en un único archivo PDF final.
import arcpy, os path = os.getcwd() #a relative path allowing for easy packaging
#Create PDF and remove if it already exists pdfPath = path + r"\States_SubRegions.pdf"
if os.path.exists(pdfPath):
os.remove(pdfPath) pdfDoc = arcpy.mapping.PDFDocumentCreate(pdfPath)
subRegionList = ["East North Central", "East South Central", "Middle Atlantic", "Mountain", "New England", "Pacific", "South Atlantic", "West North Central", "West South Central"]
mxd = arcpy.mapping.MapDocument(path + r"\States_SubRegions.mxd") df = arcpy.mapping.ListDataFrames(mxd)[0] lyr = arcpy.mapping.ListLayers(mxd, "States")[0]
pageCount = 1 for region in subRegionList:
#Generate image for each sub region whereClause = "\"SUB_REGION\" = '" + region + "'"
lyr.definitionQuery = whereClause arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", whereClause) df.extent = lyr.getSelectedExtent() arcpy.SelectLayerByAttribute_management(lyr, "CLEAR_SELECTION") arcpy.mapping.ExportToEMF(mxd, path + "\RegionalPicture.emf", df) #single file
#Generate report arcpy.mapping.ExportReport(report_source=lyr, report_layout_file=path + r"\States_SubRegions.rlf", output_file=path + r"\temp" + str(pageCount) + ".pdf", starting_page_number=pageCount)
#Append pages into final output pdfDoc.appendPages(path + r"\temp" + str(pageCount) + ".pdf") os.remove(path + r"\temp.pdf") pageCount = pageCount + 1
pdfDoc.saveAndClose()
del mxd