Zusammenfassung
Exportiert einen formatierten, tabellarischen Bericht, der Daten aus Layern oder Standalone-Tabellen in einem Kartendokument zusammen mit den Berichtsvorlageninformationen verwendet, die in einer Berichtslayoutdatei (.rlf) bereitgestellt werden.
Diskussion
Die ExportReport-Funktion bietet einen Mechanismus zur automatisierten Erstellung von Berichten anhand von Layern oder Tabellen, die in einem Kartendokument (.mxd) erstellt wurden, oder anhand von Layern in einer Layer-Datei (.lyr). Eine in ArcMap erstellte Berichtslayoutdatei ist eine Vorlage, die Informationen zum Inhalt und zur Platzierung der Elemente in einem Bericht speichert. Die Berichtslayoutdatei wird mit den Quelldaten in einem Kartendokument zum Erstellen von Ausgabeberichten verwendet. Den Quelldaten können auch Verbindungen und verwandte Tabelleninformationen zugeordnet sein, die im Bericht verwendet werden.
Die Quelldaten müssen in einem Kartendokument (.mxd) oder einer Layer-Datei (.lyr) vorhanden sein, und die Dataset-Feldnamen müssen mit denen der Berichtslayoutdatei übereinstimmen, damit ExportReport ordnungsgemäß ausgeführt wird. Eine Berichtslayoutdatei kann mit verschiedenen Datenquellen verwendet werden, vorausgesetzt, die Datenquelle weist die gleichen Dataset-Feldnamen auf. Wenn die Daten ähnlich sind, die Feldnamen der Datenquellen sich jedoch unterscheiden, kann der Parameter field_map verwendet werden, um die Felder der Berichtslayoutdatei unterschiedlichen Feldnamen im Quellen-Dataset erneut zuzuordnen.
Es gibt zahlreiche Elemente, die in einer Berichtslayoutdatei in ArcMap erstellt und nicht direkt über die Funktion ExportReport bereitgestellt werden. In einigen Fällen ist die Erstellung einer Sammlung spezifischer Vorlagen erforderlich, um verschiedene Berichtsszenarien zu generieren und zu exportieren.
Die Berichtswerkzeuge in der ArcMap-Benutzeroberfläche verfügen über eine Schaltfläche mit dem Namen Dataset-Optionen. Über diese Schaltfläche kann der Autor nur eine von vier Methoden zum Verarbeiten von Datensätzen auswählen: Alle, Ausgewählter Satz, Sichtbare Ausdehnung und Definitionsabfrage. Der Parameter dataset_option erfüllt den gleichen Zweck und verwendet ein Schlüsselwort. Mit der dataset_option ALL oder SELECTED werden die entsprechenden Datensätze einfach verarbeitet. Wenn dataset_option auf DEFINITION_QUERY festgelegt wird, muss eine gültige Zeichenfolge für den Parameter report_definition_query bereitgestellt werden. Wenn dataset_option auf EXTENT festgelegt wird, muss ein gültiges Ausdehnungsobjekt für den Parameter extent bereitgestellt werden.
Ähnlich wie bei der Benutzeroberfläche kann jeweils nur ein dataset_option-Schlüsselwort verwendet werden. In der Benutzeroberfläche ist es z. B. nicht möglich, nur die ausgewählte Gruppe von Datensätzen und nur jene in der sichtbaren Ausdehnung zu verarbeiten. Die gleiche Regel gilt für die Funktion ExportReport; es kann jeweils nur ein Parameter festgelegt werden. Wenn mehrere Parameter festgelegt werden, überschreiben sie sich gegenseitig. Standard-ArcPy-Attribut- und/oder räumliche Abfragefunktionen können jedoch kombiniert und mit dem Wert SELECTED für den Parameter dataset_option verknüpft werden, um den endgültigen, gewünschten Bericht zu erstellen. Ein Beispiel finden Sie unten.
Mit dem Parameter page_range kann ein Bericht nur für eine Teilmenge von Seiten erstellt werden. Dies können eine Reihe zusammenhängender Seiten (5-12) oder auch mehrere Einzelseiten (3,7) sein. In diesen Fällen stimmen die Seitenzahlen mit Ihrer Eingabe (Seite 3, Seite 7) überein, wenn Sie einen Bericht erstellen und starting_page_number auf 1 festgelegt ist. Dies ist für Szenarien vorgesehen, bei denen nur eine ausgewählte Anzahl von Seiten erneut gedruckt und in bereits vorhandene Berichte eingefügt wird. Wenn das Szenario erfordert, dass die Ausgabeseitenzahlen fortlaufend sind, z. B. (Seite 1, Seite 2), müssen Sie den Parameter starting_page_number auf die gewünschte Seitenzahl und den Parameter page_range auf eine einzelne Seite festlegen. Dies bedeutet, dass ExportReport einmal für jede Seite ausgeführt werden muss, z. B. einmal mit starting_page_number = 3, page_range="3" und erneut mit starting_page_number = 7, page_range="7".
Der Parameter field_map ist nur dann erforderlich, wenn sich die Dataset-Feldnamen der source_data und die zum Erstellen der Berichtslayoutdatei verwendeten Feldnamen unterscheiden. Beim Erstellen der field_map müssen nur die im Bericht verwendeten Felder dem Wörterbuch hinzugefügt werden. Wenn Felder aus dem Feldzuordnungswörterbuch gelöscht werden, werden diese Felder auch aus dem Bericht gelöscht. Die zugeordneten Felder müssen identische Datentypen aufweisen und bei den Feldnamen in der field_map wird zwischen Groß- und Kleinschreibung unterschieden.
Es ist möglich, arcpy.mapping zum Erstellen von Berichten zu verwenden, sodass Sie eine Karte in den Bericht aufnehmen können. Bilder in einem Bericht weisen eine Eigenschaft namens Source Image auf. Arcpy.mapping hat keinen Zugriff auf diesen Wert, aber wenn der Wert für die Bildquelle auf einen Pfad auf der Festplatte verweist, kann arcpy.mapping die Datei auf der Festplatte mit einem Exportvorgang aktualisieren, und die Berichts-Engine verwendet das jeweils verfügbare Bild. Beispielsweise könnten Sie für eine Kartenserie das Bild je nach aktueller Ausdehnung mit arcpy.mapping ändern, bevor Sie die nächste Seite aufrufen. Ein Beispiel finden Sie unten.
Weitere Informationen zum Erstellen von Berichten in ArcGIS finden Sie in den folgenden Einführungsthemen:
Syntax
ExportReport (report_source, report_layout_file, output_file, {dataset_option}, {report_title}, {starting_page_number}, {page_range}, {report_definition_query}, {extent}, {field_map})
Parameter | Erläuterung | Datentyp |
report_source | Object | |
report_layout_file | Eine Zeichenfolge, die den Pfad und den Dateinamen der Berichtslayoutdatei (.rlf) angibt. | String |
output_file | Eine Zeichenfolge, die den Pfad und den Dateinamen der Ausgabedatei angibt. Das Ausgabeformat wird über die angegebene Dateierweiterung gesteuert. Die folgenden Erweiterungen/Formate werden unterstützt: .htm, .html, .pdf, .rtf, .tif, .tiff, .txt und .xls. | String |
dataset_option | Ein Schlüsselwort, anhand dessen festgelegt wird, welche Dataset-Zeilen im Ausgabebericht verarbeitet werden. Dieser Wert überschreibt den Wert Dataset Options, der in der Berichtslayoutdatei gespeichert ist, die sich im Dialogfeld Report Properties befindet. Wenn der Parameter dataset_option nicht festgelegt wird, wird der in der Berichtslayoutdatei gespeicherte Standardwert übernommen. Wenn dataset_option auf DEFINITION_QUERY festgelegt wird, muss eine gültige Zeichenfolge für den Parameter report_definition_query bereitgestellt werden. Wenn dataset_option auf EXTENT festgelegt wird, muss ein gültiges Ausdehnungsobjekt für den Parameter extent bereitgestellt werden. Da anhand des Schlüsselwortes dataset_option gesteuert wird, welche zusätzlichen Parameter verwendet werden sollen, kann jeweils nur einer dieser Parameter festgelegt werden, wie dies in der Benutzeroberfläche der Fall ist.
(Der Standardwert ist USE_RLF) | String |
report_title | Eine Zeichenfolge, die den Titel des Berichts angibt, die im Header-Abschnitt der Berichtslayoutdatei angezeigt wird. | String |
starting_page_number | Eine Zahl, die die gedruckte Zeitenzahl für die erste Seite des Ausgabeberichts angibt. Dieser Wert ist hilfreich für den Versatz von Seitennummern für Berichte, die an vorhandene Dokumente angehängt werden. (Der Standardwert ist 1) | Long |
page_range | Eine Zeichenfolge, die die Berichtsseiten identifiziert, die in die Datei exportiert werden sollen (z. B. 1, 3, 5-12). | String |
report_definition_query | Eine Zeichenfolge, die eine gültige Definitionsabfrage angibt, anhand derer gesteuert wird, welche Zeilen in den Ausgabebericht exportiert werden. Dieser Parameter kann nur dann festgelegt werden, wenn der Parameter dataset_option auf DEFINITION_QUERY festgelegt ist. Dieser Wert überschreibt alle Einstellungen, die in der Berichtslayoutdatei gespeichert sind. Wenn der Layer oder die Tabelle report_source über eine vorhandene Definitionsabfrage verfügt, wird die report_definition_query auf die vorhandene Teilmenge der Datensätze angewandt. | String |
extent | Ein Ausdehnungsobjekt für Geoverarbeitung. Dieser Parameter kann nur dann festgelegt werden, wenn der Parameter dataset_option auf EXTENT eingestellt ist. Wenn ein extent-Objekt an diesen Parameter übergeben wird, basieren die Zeilen auf den Features, die die Ausdehnung schneiden. | Extent |
field_map | Dieser Parameter ermöglicht die Verwendung einer Berichtslayoutdatei mit einer Datenquelle, die ähnliche Datentypen, aber unterschiedliche Feldnamen aufweist. Ein Wörterbuch mit zugeordneten Feldnamen wird verwendet, um die Felder in der Berichtslayoutdatei den neuen Feldern in der Datenquelle neu zuzuordnen. Im Folgenden sehen Sie ein Beispiel für die field_map-Wörterbuchstruktur:
| Dictionary |
Codebeispiel
ExportReport – Beispiel 1
Das folgende Skript exportiert einen Bericht in eine PDF-Datei, indem ausgewählte Features des Layers im Kartendokument verwendet werden. Da andere optionale Parameter übersprungen werden, wird der extent-Parametername explizit angegeben.
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
ExportReport – Beispiel 2
Das folgende Skript ähnelt dem oben aufgeführten, verwendet jedoch einen Layer in einer Layer-Datei als Referenz.
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
ExportReport – Beispiel 3
Das folgende Skript erweitert das Beispiel oben, um zu veranschaulichen, wie eine räumliche Auswahl und eine Attributauswahl kombiniert werden, um den gewünschten Bericht zu generieren. Dies ist erforderlich, da jeweils nur eine dataset_option verwendet werden kann. Die Ergebnisse werden zu einer Auswahl kombiniert und verwenden den Wert SELECTED für den Parameter 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
ExportReport – Beispiel 4
Das folgende Skript verwendet eine vorhandene Berichtslayoutdatei für ein anderes Dataset mit anderen Feldnamen. Es wird ein neuer Titel verwendet, um den Titel der Berichtslayoutdatei zu überschreiben, und die Felder werden mit dem field_map-Parameter neu zugeordnet.
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
ExportReport – Beispiel 5
Das folgende Skript veranschaulicht, wie eine Karte in einen Bericht eingefügt wird. Es wird ein mehrseitiger Bericht erstellt. Jede Seite enthält ein großes Bild, das die aktuelle Ausdehnung des Datenrahmens anzeigt, sowie einen Bericht, der Informationen zu den Features innerhalb der Ausdehnung angibt. Nachdem jede Datenrahmenausdehnung geändert wurde, wird der Datenrahmen in eine .emf-Datei exportiert und es wird mithilfe von ExportReport eine einzelne PDF-Datei erstellt. Alle Seiten werden zu einer einzelnen endgültigen PDF-Datei zusammengefasst.
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